Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Požadavky
Modul SqlServer PowerShell je nezbytný pro některé příklady uvedené v této kapitole. Další informace o modulu SqlServer PowerShell a instrukcích k instalaci najdete v tématu přehled SQL Server PowerShell. Používá se také v dalších kapitolách. Stáhněte a nainstalujte ho na počítač s testovacím prostředím Windows.
Správné formátování
V kapitole 4 jste se naučili filtrovat co nejvíce vlevo. Pravidlo pro ruční formátování výstupu příkazu je podobné ho, s výjimkou toho, že se musí co nejvíce nacházet napravo.
Nejběžnější příkazy formátu jsou Format-Table a Format-List.
Format-Wide a Format-Custom lze použít také, ale jsou méně časté.
Jak je uvedeno v kapitole 3, příkaz, který vrátí více než čtyři vlastnosti, se ve výchozím nastavení zobrazí jako seznam, pokud není použito vlastní formátování.
Get-Service -Name w32time |
Select-Object -Property Status, DisplayName, Can*
Status : Running
DisplayName : Windows Time
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
Použijte rutinu Format-Table k ručnímu přepsání formátování a zobrazení výstupu v tabulce místo seznamu.
Get-Service -Name w32time |
Select-Object -Property Status, DisplayName, Can* |
Format-Table
Status DisplayName CanPauseAndContinue CanShutdown CanStop
------ ----------- ------------------- ----------- -------
Running Windows Time False True True
Výchozí výstup pro Get-Service je tři vlastnosti v tabulce.
Get-Service -Name w32time
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Pomocí rutiny Format-List můžete přepsat výchozí formátování a vrátit výsledky v seznamu.
Get-Service -Name w32time | Format-List
Všimněte si, že přesměrování Get-Service do Format-List způsobilo vrácení dalších vlastností. K tomu nedochází u každého příkazu kvůli tomu, jak je formát konkrétního příkazu nastavený na pozadí.
Name : w32time
DisplayName : Windows Time
Status : Running
DependentServices : {}
ServicesDependedOn : {}
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
ServiceType : Win32OwnProcess, Win32ShareProcess
Nejdůležitější věc, kterou byste si měli uvědomit u formátovacích rutin, je, že vytvářejí formátovací objekty, které jsou odlišné od normálních objektů v PowerShellu.
Get-Service -Name w32time | Format-List | Get-Member
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
autosizeInfo Property Microsoft.PowerShell.C...
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
pageFooterEntry Property Microsoft.PowerShell.C...
pageHeaderEntry Property Microsoft.PowerShell.C...
shapeInfo Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
shapeInfo Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
formatEntryInfo Property Microsoft.PowerShell.C...
outOfBand Property bool outOfBand {get;set;}
writeStream Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupEndData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEndData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
To znamená, že příkazy pro formátování nelze převést na většinu ostatních příkazů. Dají se převést na některé příkazy Out-*, ale to je všechno. To je důvod, proč chcete provést jakékoli formátování na konci řádku (formát vpravo).
Přezdívky
Alias v PowerShellu je kratší název příkazu. PowerShell obsahuje sadu předdefinovaných aliasů a můžete také definovat vlastní aliasy.
Rutina Get-Alias slouží k vyhledání aliasů. Pokud už alias příkazu znáte, použije se parametr Name k určení, k jakému příkazu je alias přidružený.
Get-Alias -Name gcm
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Pro hodnotu parametru Name lze zadat více aliasů.
Get-Alias -Name gcm, gm
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Alias gm -> Get-Member
Parametr Name bývá často vynechán, protože se jedná o poziční parametr.
Get-Alias gm
CommandType Name Version
----------- ---- -------
Alias gm -> Get-Member
Pokud chcete najít aliasy pro příkaz, musíte použít parametr Definition.
Get-Alias -Definition Get-Command, Get-Member
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Alias gm -> Get-Member
Parametr Definition nelze použít jako poziční argument, takže je nutné ho zadat explicitně.
Aliasy vám můžou ušetřit několik klávesových úhozů a jsou v pořádku, když zadáváte příkazy do konzole. Neměly by se používat ve skriptech ani v žádném kódu, který ukládáte nebo sdílíte s ostatními. Jak už bylo zmíněno dříve v této knize, použití úplných názvů rutin a parametrů je samo-vysvětlující a je snadnější na pochopení.
Při vytváření vlastních aliasů buďte opatrní, protože existují jenom v aktuální relaci PowerShellu na vašem počítači.
Poskytovatelé
V PowerShellu je poskytovatel rozhraní, které umožňuje přístup k úložišti dat způsobem podobným souborovému systému. PowerShell obsahuje několik předdefinovaných poskytovatelů.
Get-PSProvider
Jak vidíte v následujících výsledcích, existují předdefinované zprostředkovatele pro registr, aliasy, proměnné prostředí, systém souborů, funkce, proměnné, certifikáty a WSMan.
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Cr... {C, D}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
Jednotky skutečně používané těmito poskytovateli k poskytnutí svého úložiště dat je možné určit pomocí rutiny Get-PSDrive. Cmdlet Get-PSDrive nejen zobrazuje jednotky poskytované poskytovateli, ale také logické jednotky Windows, včetně jednotek mapovaných na sdílené síťové složky.
Get-PSDrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 18.56 107.62 FileSystem C:\
Cert Certificate \
D FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
Moduly třetích stran, jako jsou modul ActiveDirectory PowerShellu a modul SqlServer PowerShellu, přidávají vlastního poskytovatele PowerShellu i PSDrive.
Importujte moduly PowerShellu ActiveDirectory a SqlServer.
Import-Module -Name ActiveDirectory, SQLServer
Zkontrolujte, jestli se přidali další poskytovatelé PowerShellu.
Get-PSProvider
Všimněte si, že v následující sadě výsledků teď existují dva noví poskytovatelé PowerShellu, jeden pro Active Directory a druhý pro SQL Server.
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Credentials {C, A, D}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
ActiveDirectory Include, Exclude, Filter, Shoul... {AD}
SqlServer Credentials {SQLSERVER}
Přidali jsme také PSDrive pro každý z těchto modulů.
Get-PSDrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
A FileSystem A:\
AD ActiveDire... //RootDSE/
Alias Alias
C 19.38 107.13 FileSystem C:\
Cert Certificate \
D FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
SQLSERVER SqlServer SQLSERVER:\
Variable Variable
WSMan WSMan
Ke službě PSDrive se dá přistupovat stejně jako k tradičnímu systému souborů.
Get-ChildItem -Path Cert:\LocalMachine\CA
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\CA
Thumbprint Subject
---------- -------
FEE449EE0E3965A5246F000E87FDE2A065FD89D4 CN=Root Agency
D559A586669B08F46A30A133F8A9ED3D038E2EA8 OU=www.verisign.com/CPS Incorp....
109F1CAED645BB78B3EA2B94C0697C740733031C CN=Microsoft Windows Hardware C...
Operátory porovnání
PowerShell obsahuje různé relační operátory, které slouží k porovnání hodnot nebo hledání hodnot, které odpovídají určitým vzorům. Následující tabulka obsahuje seznam operátorů porovnání v PowerShellu.
Všechny operátory uvedené v tabulce jsou necitlivé na velikost písmen. Pro rozlišování velkých a malých písmen umístěte před operátor c. Například -ceq je verzí porovnávacího operátoru equals (-eq), která rozlišuje malá a velká písmena.
| Operátor | Definice |
|---|---|
-eq |
Rovná se |
-ne |
Nerovná se |
-gt |
Větší než |
-ge |
Větší než nebo rovno |
-lt |
Méně než |
-le |
Menší nebo rovno |
-like |
Shoda pomocí zástupného znaku * |
-notlike |
Neodpovídá použití zástupného znaku * |
-match |
Odpovídá zadanému regulárnímu výrazu. |
-notmatch |
Neodpovídá zadanému regulárnímu výrazu. |
-contains |
Určuje, jestli kolekce obsahuje zadanou hodnotu. |
-notcontains |
Určuje, jestli kolekce neobsahuje konkrétní hodnotu. |
-in |
Určuje, jestli je zadaná hodnota v kolekci. |
-notin |
Určuje, jestli zadaná hodnota není v kolekci. |
-replace |
Nahradí zadanou hodnotu. |
Forma s velkým písmenem "PowerShell" je stejná jako forma s malým písmenem "powershell" při použití operátoru porovnání "rovná se".
'PowerShell' -eq 'powershell'
True
Není to stejné jako použití malá a velká písmena rozlišující verze operátoru porovnání equals.
'PowerShell' -ceq 'powershell'
False
Operátor pro porovnání nerovnosti obrátí podmínku.
'PowerShell' -ne 'powershell'
False
Operátory „větší než“, „větší nebo rovno“, „menší než“ a „menší nebo rovno“ fungují s řetězcovými i číselnými hodnotami.
5 -gt 5
False
Když použijete větší nebo rovná místo větší než v předchozím příkladu, vrátí se Boolean true, protože pět je rovno pěti.
5 -ge 5
True
Na základě výsledků z předchozích dvou příkladů můžete pravděpodobně odhadnout, jak funguje menší než nebo rovno.
5 -lt 10
True
Operátory -like a -match můžou být matoucí i pro zkušené uživatele PowerShellu.
-like se používá se zástupnými znaky * a ? k provádění shod typu „like“.
'PowerShell' -like '*shell'
True
Operátor -match používá k provedení porovnávání regulární výraz.
'PowerShell' -match '^.*shell$'
True
Pomocí operátoru rozsahu uložte čísla 1 až 10 do proměnné.
$Numbers = 1..10
Určuje, jestli $Numbers proměnná obsahuje hodnotu 15.
$Numbers -contains 15
False
Určete, jestli obsahuje číslo 10.
$Numbers -contains 10
True
Operátor -notcontains obrátí logiku a zjistí, jestli proměnná $Numbers neobsahuje hodnotu.
$Numbers -notcontains 15
Předchozí příklad vrátí Boolean true, protože je pravda, že proměnná $Numbers neobsahuje 15.
True
Obsahuje číslo 10, ale při testování je to nepravda.
$Numbers -notcontains 10
False
Operátor porovnání -in byl poprvé představen v PowerShellu verze 3.0. Používá se k určení, jestli je hodnota v poli. Proměnná $Numbers je matice, protože obsahuje více hodnot.
15 -in $Numbers
False
Jinými slovy, -in provádí stejný test jako operátor porovnání, ale z opačného směru.
10 -in $Numbers
True
Patnáct není v poli $Numbers, takže v následujícím příkladu se vrátí nepravda.
15 -in $Numbers
False
Stejně jako operátor -containsnot obrátí logiku operátoru -in.
10 -notin $Numbers
Předchozí příklad vrátí hodnotu false, protože pole $Numbers obsahuje 10 a podmínka testuje, zda neobsahuje 10.
False
Určete, jestli patnáct není v poli $Numbers.
15 -notin $Numbers
15 není v poli $Numbers, takže vrátí Boolean true.
True
Operátor -replace dělá jen to, co byste si mysleli. Slouží k nahrazení něčeho. Zadáním jedné hodnoty se tato hodnota nahradí žádnou hodnotou. V následujícím příkladu nahradíte "Shell" s ničím.
'PowerShell' -replace 'Shell'
Power
Pokud chcete nahradit hodnotu jinou, zadejte novou hodnotu za vzor, který chcete nahradit. SQL Saturday v Baton Rouge je událost, na které se snažím každý rok přednášet. V následujícím příkladu je slovo "Sobota" nahrazeno zkratkou "Sat".
'SQL Saturday - Baton Rouge' -replace 'saturday','Sat'
SQL Sat - Baton Rouge
Existují také metody jako Replace(), které lze použít k nahrazení věcí podobných tomu, jak operátor replace funguje. Operátor -replace ale ve výchozím nastavení nerozlišuje malá a velká písmena a metoda Replace() rozlišuje malá a velká písmena.
'SQL Saturday - Baton Rouge'.Replace('saturday','Sat')
Všimněte si, že slovo "Sobota" není nahrazeno. Je to proto, že je zadaný v jiném případě než původní.
SQL Saturday - Baton Rouge
Pokud je slovo "Saturday" zadáno ve stejném případě jako původní, Replace() metoda provede nahrazení podle očekávání.
'SQL Saturday - Baton Rouge'.Replace('Saturday','Sat')
SQL Sat - Baton Rouge
Při použití metod transformace dat buďte opatrní, protože můžete narazit na nepředvídatelné problémy, jako je například selhání v testu zvaném "Turecko" . Příklad naleznete v mém blogovém článku, Použití Pester k testování kódu PowerShellu s jinými kulturami. Doporučuji používat operátory místo metod, kdykoli je to možné, aby se zabránilo těmto typům problémů.
I když lze použít relační operátory, jak je znázorněno v předchozích příkladech, obvykle je používám s rutinou Where-Object k provádění filtrování.
Shrnutí
V této kapitole jste se seznámili s několika tématy, včetně správného formátování, aliasů, poskytovatelů a porovnávacích operátorů.
Přezkoumání
- Proč je nutné provádět formátování co nejvíce vpravo?
- Jak zjistíte, jaká je skutečná rutina pro alias
%? - Proč byste neměli používat aliasy ve skriptech, které ukládáte, nebo kód, který sdílíte s ostatními?
- Zobrazte seznam adresářů na jednotkách přidružených k poskytovateli registru systému.
- Jaká je jedna z hlavních výhod použití operátoru replace místo metody replace?
Odkazy
- Formát-Tabulka
- Formát seznamu
- Široký formát
- o_Aliasů
- o_poskytovatelích
- o_operatorových_porovnáních
- about_Arrays
Další kroky
V další kapitole se dozvíte o řízení toku, skriptování, smyčkách a podmíněné logice.