我正在導入CSV並根據CSV中的值回收該站點。 csv根據我們收到的警報動態組建。 當我嘗試下面的代碼我收到打印的價值觀和錯誤Powershell中的Foreach和數組變量
import-csv d:\emscripts\recy\recycle.txt -Header "site","IP","Log" | foreach {
$_.IP
$_.site
$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName $_.IP -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/$($_.site)" }
$appPool.Recycle()
}
* 192.168.100.182 Testsite1 你不能調用一個空值表達式的方法。 在線:5字符:5 + $ appPool.Recycle() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + FullyQualifiedErrorId:InvokeMethodOnNull
192.168.100.131 testsite2 您無法在空值表達式上調用方法。 在線:5字符:5 + $ appPool.Recycle() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + FullyQualifiedErrorId:InvokeMethodOnNull *
您可以看到打印的值已打印,但未能將任何內容讀入$ appPool。
我已將其更改爲以下內容,並且按預期工作。
$RecyleSites = import-csv recycle.txt -Header "site","IP","Log"
foreach ($site in $RecyleSites) {
$site.IP
$site.site
$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName $site.IP -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/$($site.site)" }
$appPool.Recycle()
}
我想明白我在第一組代碼中做錯了什麼?
添加代碼來驗證你真的找回,你以爲你是WMI對象只是這樣做。 – EBGreen 2015-02-10 16:59:00
謝謝。我做到了這一點,我得到了$ appPool的空值。但第二組類似的代碼正在工作。唯一不同的是,我正在將這些值傳遞給一個數組,並且在我讀取的第一組數據集中嘗試傳遞它。我認爲它沒有傳遞_.site或$ _。IP的值。 – Sunil 2015-02-10 17:11:12
我剛剛使用ForEach-Object進行了測試。不,它不工作,結果相同。與foreach也是它打印的價值,但不會進入Get-WmiObject – Sunil 2015-02-10 17:19:21