Začátkem tohoto týdne jsem na Raspberry Pi nastavil .NET Core a Docker a zjistil jsem, že mohu spustit svůj podcast webové stránky docela snadno na Pi. Podívejte se na ten příspěvek, protože se toho hodně děje. Mohu testovat v linuxovém kontejneru a odeslat výsledky testu hostiteli a poté je otevřít ve VS. Také jsem prozkoumal přiměřeně komplexní soubor Dockerfile, který je jak vícearchový, tak vícestupňový. Mohu spolehlivě vytvořit a otestovat svůj web buď v kontejneru, nebo na holém kovu Windows nebo Linuxu. Velmi zábavné.
Jako primárně vývojář Windows mám spoustu dávkových/cmd souborů jako "test.bat" nebo "dockerbuild.bat." Začínají jako malé kousky automatizace, ale jak se projekt nevyhnutelně stává složitějším.
Nemám zájem nikomu "prodávat" PowerShell. Pokud máte rádi bash, použijte bash, je to krásné, stejně jako shell skripty. PowerShell je ve svém kanálu objektově orientovaný, přesouvá seznamy skutečných objektů jako standardní výstup. Jsou jiní a co je nejdůležitější, umí spolu žít. Stejně jako byste mohli volat skripty Pythonu z bash, můžete volat skripty PowerShellu z bash nebo naopak. Další nástroj v našich sadách nástrojů.
PS /home/pi> Get-Process | Where-Object WorkingSet -gt 10MB
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 10.92 890.87 917 917 docker-containe
0 0.00 35.64 1,140.29 449 449 dockerd
0 0.00 10.36 0.88 1272 037 light-locker
0 0.00 20.46 608.04 1245 037 lxpanel
0 0.00 69.06 32.30 3777 749 pwsh
0 0.00 31.60 107.74 647 647 Xorg
0 0.00 10.60 0.77 1279 037 zenity
0 0.00 10.52 0.77 1280 037 zenity
Bash a shell skripty jsou SUPER výkonné. Je to celý svět. Ale je založen na textu (nebo json pro některé novější věci), takže často o textu více přemýšlíte.
pi@raspberrypidotnet:~ $ ps aux | sort -rn -k 5,6 | head -n6
root 449 0.5 3.8 956240 36500 ? Ssl May17 19:00 /usr/bin/dockerd -H fd://
root 917 0.4 1.1 910492 11180 ? Ssl May17 14:51 docker-containerd --config /var/run/docker/containerd/containerd.toml
root 647 0.0 3.4 155608 32360 tty7 Ssl+ May17 1:47 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
pi 1245 0.2 2.2 153132 20952 ? Sl May17 10:08 lxpanel --profile LXDE-pi
pi 1272 0.0 1.1 145928 10612 ? Sl May17 0:00 light-locker
pi 1279 0.0 1.1 145020 10856 ? Sl May17 0:00 zenity --warning --no-wrap --text
Můžete to vzít tak daleko, jak chcete. Pro někoho je to intuitivní síla, pro jiného baroko.
pi@raspberrypidotnet:~ $ ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }'
0.00 Mb COMMAND
161.14 Mb /usr/bin/dockerd -H fd://
124.20 Mb docker-containerd --config /var/run/docker/containerd/containerd.toml
78.23 Mb lxpanel --profile LXDE-pi
66.31 Mb /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
61.66 Mb light-locker
Jde o to, že je na výběr. Zde je pěkný článek o PowerShellu z pohledu uživatele Linuxu. Mohu nainstalovat PowerShell na svůj Raspberry Pi (nebo jakýkoli počítač s Linuxem) a používat stejné skripty na obou místech? ANO.
Po mnoho let byl PowerShell jedinou věcí pro Windows, která byla součástí uzavřeného ekosystému Windows. Ve skutečnosti je zde video, kde jsem před téměř 12 lety (pracoval jsem v bankovnictví) mluvil s Jeffrey Snoverem o PowerShellu. Dnes je PowerShell open source na https://github.com/PowerShell se spoustou dokumentů a skriptů, také open source. PowerShell je podporován na Windows, Mac a půl tuctu Linuxů. Zní povědomě? Je to proto, že je poháněn (ehm) open source multiplatformním .NET Core. PowerShell Core 6.0 můžete získat zde na jakékoli platformě.
Nechce se vám to nainstalovat? Spusťte jej v Dockeru během několika sekund pomocí
docker run -it microsoft/powershell
Bonbón. Co třeba Raspbian na mém Raspberry Pi založeném na ARMv7? Spouštěl jsem Raspbian Jessie a PowerShell je podporován na Raspbian Stretch (novější), takže jsem upgradoval z Jesse na Stretch (a udělal pořádek a provedl firmware, zatímco jsem v tom) s:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
$ sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list
$ sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/raspi.list
$ sudo apt-get update && sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade -y
$ sudo rpi-update
Chladný. Nyní jsem na Raspbian Stretch na svém Raspberry Pi 3. Pojďme nainstalovat PowerShell! Toto jsou jen nejzákladnější pokyny Začínáme. Pokud máte problémy s předpoklady nebo cestami, podívejte se na GitHub, kde najdete pokročilé a podrobné informace.
POZNÁMKA: Zde získávám PowerShell Core 6.0.2. Pokud to budete číst v budoucnu, nezapomeňte se podívat na stránku s vydáními. Úspěšně jsem také použil 6.1.0 (v náhledu). Další náhled 6.1 upgraduje na .NET Core 2.1. Pokud pouze hodnotíte, získejte nejnovější náhled, protože bude obsahovat nejnovější opravy chyb.
$ sudo apt-get install libunwind8
$ wget https://github.com/PowerShell/PowerShell/releases/download/v6.0.2/powershell-6.0.2-linux-arm32.tar.gz
$ mkdir ~/powershell
$ tar -xvf ./powershell-6.0.2-linux-arm32.tar.gz -C ~/powershell
$ sudo ln -s ~/powershell/pwsh /usr/bin/pwsh
$ sudo ln -s ~/powershell/pwsh /usr/local/bin/powershell
$ powershell
Krásné.
GOTCHA: Protože jsem upgradoval z Jessie na Stretch, narazil jsem na chybu, kdy se libssl1.0.0 načítá přes libssl1.0.2. Toto je složitý nativní problém s interakcí mezi PowerShell a .NET Core 2.0, který se opravuje. Budou to dělat pouze upgradované počítače, ale lze to snadno opravit pomocí sudo apt-get remove libssl1.0.0
Nyní to znamená, že moje skripty sestavení PowerShellu mohou fungovat ve Windows i Linuxu. Toto je hluboce triviální příklad (jen jeden řádek), ale všimněte si "shebang" nahoře, který dává Linuxu vědět, k čemu je soubor *.ps1. To znamená, že mohu nadále používat bash/zsh/fish na Raspbian, ale stále „build.ps1“ nebo „test.ps1“ na jakékoli platformě.
#!/usr/local/bin/powershell
dotnet watch --project .\hanselminutes.core.tests test /p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=./lcov
Zde je několik zcela náhodných, ale krásných příkladů prostředí PowerShell:
PS /home/pi> Get-Date | Select-Object -Property * | ConvertTo-Json
{
"DisplayHint": 2,
"DateTime": "Sunday, May 20, 2018 5:55:35 AM",
"Date": "2018-05-20T00:00:00+00:00",
"Day": 20,
"DayOfWeek": 0,
"DayOfYear": 140,
"Hour": 5,
"Kind": 2,
"Millisecond": 502,
"Minute": 55,
"Month": 5,
"Second": 35,
"Ticks": 636623925355021162,
"TimeOfDay": {
"Ticks": 213355021162,
"Days": 0,
"Hours": 5,
"Milliseconds": 502,
"Minutes": 55,
"Seconds": 35,
"TotalDays": 0.24693868190046295,
"TotalHours": 5.9265283656111105,
"TotalMilliseconds": 21335502.1162,
"TotalMinutes": 355.59170193666665,
"TotalSeconds": 21335.502116199998
},
"Year": 2018
}
Objekty PowerShellu můžete přenášet do az objektů, hashtables, JSON atd.
PS /home/pi> $hash | ConvertTo-Json
{
"Shape": "Square",
"Color": "Blue",
"Number": 1
}
PS /home/pi> $hash = @{ Number = 1; Shape = "Square"; Color = "Blue"}
PS /home/pi> $hash
Name Value
---- -----
Shape Square
Color Blue
Number 1
PS /home/pi> $hash | ConvertTo-Json
{
"Shape": "Square",
"Color": "Blue",
"Number": 1
}
Tady je jeden pěkný z MCPMag:
PS /home/pi> $URI = "https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text='{0}, {1}')&format=json&env=store://datatables.org/alltableswithkeys" -f 'Omaha','NE'
PS /home/pi> $Data = Invoke-RestMethod -Uri $URI
PS /home/pi> $Data.query.results.channel.item.forecast|Format-Table
code date day high low text
---- ---- --- ---- --- ----
39 20 May 2018 Sun 62 56 Scattered Showers
30 21 May 2018 Mon 78 53 Partly Cloudy
30 22 May 2018 Tue 88 61 Partly Cloudy
4 23 May 2018 Wed 89 67 Thunderstorms
4 24 May 2018 Thu 91 68 Thunderstorms
4 25 May 2018 Fri 92 69 Thunderstorms
34 26 May 2018 Sat 89 68 Mostly Sunny
34 27 May 2018 Sun 85 65 Mostly Sunny
30 28 May 2018 Mon 85 63 Partly Cloudy
47 29 May 2018 Tue 82 63 Scattered Thunderstorms
Nebo jednovrstvý, pokud chcete být nepříjemný.
PS /home/pi> (Invoke-RestMethod -Uri "https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text='Omaha, NE')&format=json&env=store://datatables.org/alltableswithkeys").query.results.channel.item.forecast|Format-Table
Příklad: Toto nebude fungovat na Linuxu, protože používá specifické AIP pro Windows, ale pokud máte PowerShell na svém počítači se systémem Windows, vyzkoušejte tento jednoduchý návod a získáte skvělou ukázku:
iex (New-Object Net.WebClient).DownloadString("http://bit.ly/e0Mw9w")
Myšlenky?
Sponzor :Podívejte se na JetBrains Rider:multiplatformní .NET IDE. Upravujte, refaktorujte, testujte a ladte aplikace ASP.NET, .NET Framework, .NET Core, Xamarin nebo Unity. Zjistěte více a stáhněte si 30denní zkušební verzi!