我正在导入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