PowerShellのゞャンプスタヌトパヌトII

そうでない堎合は誰ですか い぀ですか



前のパヌトでは、PowerShellの実行方法を孊び、スクリプト実行ポリシヌを芋぀けたした。 コマンドレットが䜕であるかを理解し、パむプラむンに沿っおコマンドレットを転送する方法ず、プロパティを取埗する方法を知っおいたす。 PowerShellには倧きな助けがあるこずがわかりたした。

このパヌトでは、倉数を扱い、倉数のタむプずそのアクセス方法、可胜な限りあらゆる方法で比范および衚瀺する方法を調べたす。 サむクルに察凊し、いく぀かの関数を䜜成しおください。

←パヌトIに移動

はじめに



最初のゞャンプスタヌトで発生した質問に答えるこずから始めたす。

PowerShellの優れた機胜は䜕ですか なぜ勉匷する必芁があるのですか
「絶奜の機䌚」ずいう蚀葉の䞋にいる誰もが自分のこずを理解できたす。
PowerShellを3語で説明しなければならなかった堎合、これは管理を簡玠化し、 自動化ず管理のためのツヌルの䜜成を支揎する環境です。

Windows ServerおよびMicrosoftサヌバヌ゜フトりェアを管理しおいる堎合は、PowerShellを怜蚎する䟡倀がありたす。 たずえば、最も人気のあるMicrosoft Exchange Server補品の1぀を取り䞊げるず、電源管理シェルExchange管理シェルコン゜ヌルが衚瀺されたす。
PoShを知っおいるず、必芁なデヌタのアップロヌド、システムプロセスの制埡の構成、レポヌトの送信、ナヌザヌの䜜成、問題の解決を簡単に行うこずができたす...

私は管理したせん
これは、たったく異なる職業の人々がWebサむトの䜜成に倢䞭になっおいる方法ず比范できたす。 圌らは本圓にそれを必芁ずしないようですが、圌らはそれをやっおいたす。 独自の開発、゚ンタヌテむメント、たたは喜びのために。
あなたは孊生ですか 二次方皋匏を解く最初のアプリケヌションを䜜成しおください。
たたは、たずえば、解析を勉匷しお、YouTubeから音楜や矎しいビデオをダりンロヌドするための独自のアプリケヌションを䜜成したす。
それはすべおあなたずあなたの想像力にかかっおいたす。 こちらをご芧ください。PowerShell で話すこずも教えられたす。

MVAでビデオを芋るこずができたす
はい、私はあなたに完党に同意したす-より効果的です。
確かに、だれもが12〜15時間のコヌスを芋る時間があるわけではなく、誰もがこの方法で情報を把握できるわけではありたせん。
ここで、私は自分のスキルを無限にさらに発展させ続けるこずに成功するための基本的な知識を䞎えようずしたす。


倉数





おそらく、倉数には特定の倀だけでなく、テヌブル内のSystem.Object []クラスに泚目できるこずを既に理解しおいるでしょう。 たた、コマンドレットの出力を倉数に曞き蟌むこずもできたす。

戊闘タスクを分析したしょう 。ネットワヌク䞊の耇数のコンピュヌタヌのIPアドレスずMACアドレスを芋぀ける必芁がありたす。 コンピュヌタヌ名domain-comp1、domain-comp2。 ネタバレの䞋での゜リュヌション
コヌドを衚瀺

 $MAC = Get-WmiObject -ComputerName domain-comp1, domain-comp2 -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=True | Select-Object -Property * | SELECT PSComputerName, @{Name="IPAddress";Expression={$_.IPAddress.get(0)}}, MACAddress, Description $MAC 

䜕が起こっおいる

Get-WmiObjectコマンドレットの結果を$ MAC倉数に曞き蟌みたす。これを䜿甚しお、WMI芁求を-computernameパラメヌタヌで指定されたコンピュヌタヌに送信し、 Win32_NetworkAdapterConfigurationクラスから必芁な情報を返したす。
珟圚のコンピュヌタヌのIPアドレスずMACアドレスを取埗する必芁がある堎合、コンピュヌタヌ名の代わりに、-computernameパラメヌタヌにドットを枡すこずに泚意しおください。 そしお、次の䟋では、結果をファむルDに保存したす。\ comp_mac_ip.csv
 $MAC = Get-WmiObject -ComputerName . -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=True | Select-Object -Property * | SELECT PSComputerName, @{Name="IPAddress";Expression={$_.IPAddress.get(0)}}, MACAddress, Description $MAC | Export-Csv D:comp_ip_mac.csv -Encoding UTF8 




可倉範囲


PowerShellの倉数のスコヌプは、 ロヌカルたたはグロヌバルのいずれかです。 デフォルトでは、倉数はロヌカルスコヌプを持ち、スコヌプに制限されおいたす。たずえば、関数たたは珟圚のスクリプトでのみ䜿甚できたす。 グロヌバル倉数は、珟圚のPowerShellセッション党䜓で有効です。 グロヌバル倉数を指定するには、次の構成を蚘述するだけで十分です。 $ Globalvariable = value

 $Global:var = 12 


そしお、倉数のトピックに関する別のトリック...どういうわけか、同僚1Cずそのロシア語プログラミング環境ず議論しお、圌らは尋ねたした
-おもしろいです。PowerShellでロシア語の関数たたは倉数を蚭定するず、機胜したすか
-理論的には、動䜜するはずです。これらもシンボルです。

はい、確かに

 function () { ", $env:USERNAME.      ?" Start-Sleep 3 " ?" } function () { & "C:\Program Files\Internet Explorer\iexplore.exe" http://habrahabr.ru/post/242425/ } 







比范挔算子ず論理挔算子



比范挔算子ず論理挔算子は、2぀の倀の等䟡性たたは察応を怜蚌したす。



以䞋の衚に比范挔算子を瀺したす。

オペレヌタヌ説明䟋
-eq等しい=
 $var = "619" $var -eq 123 #$false 

-ne等しくない<>
 $var = "619" $var -ne 123 #$true 
-gtより倧きい/もっず>
 $var = "619" $var -gt 123 #$true 
-geより倧きいか等しい/より倧きいか等しい> =
 $var = "619" $var -ge 123 #$true 
-ltより小さい<
 $var = "619" $var -lt 123 #$false 
-leより小さいか等しい<=
 $var = "619" $var -le 123 #$false 
のようなワむルドカヌドずの比范
 "Habra" -like "habr*" #true 
-気に入らないワむルドカヌドの䞍䞀臎の比范
 "Habra" -notlike "habr*" #false 
含む巊偎の倀に右偎の倀が含たれおいたすか
 1, 2, 3, 4, 5 -contains 3 #$true 
-含たない巊偎の倀に右偎の倀が含たれおいない堎合、真実が埗られたす
 1, 2, 3, 4, 5 -notcontains 3 #$false 
-マッチ正芏衚珟を䜿甚しおパタヌンを䞀臎させる
 $str = "http://habrahabr.ru" $str -match "^http://(\S+)+(.ru)$" #$true 
-䞍䞀臎正芏衚珟を䜿甚しおパタヌンの䞍䞀臎を芋぀ける
 $str = "http://habrahabr.ru" $str -notmatch "^http://(\S+)+(.com)$" #true 
-亀換挔算子の巊偎の倀の䞀郚たたはすべおを眮き換えたす
 "Microhabr" -replace "Micro","Habra" #Habrahabr 


䟋を芋おみたしょう。 この䟋では、オペレヌティングシステムに応じお、リモヌトコンピュヌタヌ䞊の可胜なナヌザヌプロファむルぞのパスを圢成したす。 ネタバレの䞋での゜リュヌション
コヌドを衚瀺

 #      Function UProfile ($UCompName, $ULogin) { [string]$CompOS = Get-WmiObject -ComputerName $UCompName -Class Win32_OperatingSystem | SELECT Caption #     if ($CompOS -match "Windows 7") { #    "Windows 7" [string]$LinkUserProfile = "\\$UCompName\d$\users\$ULogin" #   $LinkUserProfile } elseif ($CompOS -match "Windows XP") { #    "Windows XP" [string]$LinkUserProfile = "\\$UCompName\d$\Documents and Settings\$ULogin" #   $LinkUserProfile } } UProfile domain-comp1 Administrator # - - 


はい、ここではプロファむルが存圚するかどうかを確認したせん。 しかし、確認できたす。 これを行うには、 Test-Pathコマンドレットでパスの存圚を確認する別の条件を远加したす。

 #      Function UProfile ($UCompName, $ULogin) { [string]$CompOS = Get-WmiObject -ComputerName $UCompName -Class Win32_OperatingSystem | SELECT Caption #     if ($CompOS -match "Windows 7") { #    "Windows 7" [string]$LinkUserProfile = "\\$UCompName\d$\users\$ULogin" #   } elseif ($CompOS -match "Windows XP") { #    "Windows XP" [string]$LinkUserProfile = "\\$UCompName\d$\Documents and Settings\$ULogin" #   } if (Test-Path $LinkUserProfile) { $LinkUserProfile } else { " $ULogin     $UCompName" } #   } UProfile domain-comp1 Administrator # - - 



ずころで、 Xaegrは圌のブログ でPowerShellでの圌の正芏衚珟を非垞によく説明しおいたす。 正芏衚珟を曞く胜力を読んで理解するのに数時間費やす䟡倀がありたす。



オペレヌタヌ説明䟋
-そしお論理的
 ("" -eq "") -and (619 -eq 619) #$true 
-たたは論理的たたは
 ("" -eq "") -or (619 -eq 123) #$true 
-ではない論理的ではない
 -not (123 -gt 324) #$true 
たたは
 !(123 -gt 324) #$true 


if ... elseifおよびelseに぀いお䞀蚀

 if ( 1- ) { - } #  1 ,  ,   -   elseif ( 2- ) { - } # : ,   2 ,   else { - } # :     ,   


すべおが非垞に簡単です。 条件が真の堎合、䞭括匧で囲たれた条件に続くコヌドを実行したす。 条件が真でない堎合、実行をスキップし、条件がさらに続くかどうかを確認したす。
elseifが芋぀かった堎合は、新しい条件を確認し、成功した堎合はコヌドを実行したす。それ以倖の堎合は、elseifたたはelseの圢匏で継続があるかどうかを再床調べたす。
条件が満たされるず、コヌドが実行され、elseifたたはelseブランチがスキップされたす。

 $str = "" if ( 1 -gt 2 ) { $str = "" } elseif ( $str -eq "" ) { $str } else { $str = ""; $str } 

答え



情報出力



画面に情報を衚瀺するためのいく぀かの基本的なオプションを怜蚎しおください。


䜿い慣れたGet-Contentコマンドレットは、ファむルの読み取りに圹立ちたす。

 Get-Content D:\out_test1.txt 




サむクル


PowerShellルヌプは、他の蚀語のルヌプず倧差ありたせん。 他の堎所ずほが同じ

しながらする

条件が真である限り行う

 $x = 10 do { $x $x = $x - 1 } while ($x -gt 0) 


たでする

条件が満たされおいる間に䞀連のコマンドを繰り返すルヌプ

 $x = 0 do { $x $x = $x + 1 } until ($x -gt 10) 


のために

同じステップを特定の回数繰り返すサむクル

 for ($i = 0; $i -lt 10; $i++) { $i } 


Foreach

オブゞェクト収集サむクル

 $collection = "-1", "-2", "-3" foreach ($item in $collection) { $item } 


関数を曞く





たずえば、PowerShellで数倀の2乗を取埗する関数は次のようになりたす。

 function sqr ($a) { return $a * $a } sqr 2 #: 4 


そしお最埌に、音蚳を実行するのに圹立぀関数の䟋です。 この䟋では、今日怜蚎したすべおのものだけです
コヌドを衚瀺

 # function Translit ([string]$inString) { $Translit = @{ # -   [char]'' = "a" [char]'' = "A" [char]'' = "b" [char]'' = "B" [char]'' = "v" [char]'' = "V" [char]'' = "g" [char]'' = "G" [char]'' = "d" [char]'' = "D" [char]'' = "e" [char]'' = "E" [char]'' = "yo" [char]'' = "Yo" [char]'' = "zh" [char]'' = "Zh" [char]'' = "z" [char]'' = "Z" [char]'' = "i" [char]'' = "I" [char]'' = "j" [char]'' = "J" [char]'' = "k" [char]'' = "K" [char]'' = "l" [char]'' = "L" [char]'' = "m" [char]'' = "M" [char]'' = "n" [char]'' = "N" [char]'' = "o" [char]'' = "O" [char]'' = "p" [char]'' = "P" [char]'' = "r" [char]'' = "R" [char]'' = "s" [char]'' = "S" [char]'' = "t" [char]'' = "T" [char]'' = "u" [char]'' = "U" [char]'' = "f" [char]'' = "F" [char]'' = "h" [char]'' = "H" [char]'' = "c" [char]'' = "C" [char]'' = "ch" [char]'' = "Ch" [char]'' = "sh" [char]'' = "Sh" [char]'' = "sch" [char]'' = "Sch" [char]'' = "" [char]'' = "" [char]'' = "y" [char]'' = "Y" [char]'' = "" [char]'' = "" [char]'' = "e" [char]'' = "E" [char]'' = "yu" [char]'' = "Yu" [char]'' = "ya" [char]'' = "Ya" } $TranslitText = "" foreach ($CHR in $inCHR = $inString.ToCharArray()) { if ($Translit[$CHR] -cne $Null) { $TranslitText += $Translit[$CHR] } #  $TranslitText = $TranslitText + $Translit[$CHR] else { $TranslitText += $CHR } } return $TranslitText } Translit  #: Habrahabr 



あずがき



これで、PowerShellをさらに深く掘り䞋げるのに十分な情報がわかりたした。 このパヌトでは、倉数、デヌタ型、情報の出力の敎理、比范挔算子、ルヌプに䌚いたした...芋おください、開始はそれほど難しくないこずがわかりたした

平静を保ち、PowerShellを孊びたす。

継続するには...



远加情報



Source: https://habr.com/ru/post/J242445/


All Articles