gpt4 book ai didi

powershell - Powershell if语句中的多个WMIC命令

转载 作者:行者123 更新时间:2023-12-02 23:47:38 24 4
gpt4 key购买 nike

我刚开始使用 powershell,我有以下脚本:

Get-ADComputer -Filter * | 

ForEach-Object {

if(Test-Connection -CN $_.dnshostname -Count 1 -BufferSize 16 -Quiet)

{
write-host $_.dnshostname
Get-WmiObject Win32_Process -cn $_.dnshostname | Select ProcessID,ProcessName,ThreadCount
Get-WmiObject Win32_DiskDrive -cn $_.dnshostname;
}



ELSE { write-host $_.dnshostname unavlible }

}

基本上我想要实现的是从我的 DC 中提取每台计算机的列表,测试它们是否启动,然后使用多个 WMI 查询轮询它们。我遇到的问题是,当我在第一个 Wmi 对象上进行选择时,我不会得到第二个 wmi 对象的结果,因为我假设选择正在应用于第二个对象,导致没有数据返回。

知道我该怎么做。同样,现在我正在使用 ping 来测试机器的可用性,但这并不是最好的,因为 ICMP 在某些系统上被阻止,但 WMI 仍然是可能的。 ICMP 可用但 wmi 被阻止也是如此。是否有更好的方法来执行获取 WMI 查询将起作用的系统列表的测试?

最佳答案

我从 powershell v1 到 v3 发现的一个简单的解决方法是:

Get-ADComputer -Filter * |     
ForEach-Object {
if(Test-Connection -CN $_.dnshostname -Count 1 -BufferSize 16 -Quiet)
{
write-host $_.dnshostname
Get-WmiObject Win32_Process -cn $_.dnshostname |
Select ProcessID,ProcessName,ThreadCount
out-string -inputobject "" #this line does the trick or just out-default
Get-WmiObject Win32_DiskDrive -cn $_.dnshostname;
}
else { write-host "$($_.dnshostname) unavailable }
}

为了测试可用性服务器,我使用 this function它使用 ping 和其他协议(protocol)来查看服务器是否已启动,您只需要 true知道是否还活着。
(作为系统管理员,建议在域(而不是 DMZ 域)中启用 icmp 协议(protocol)作为第一个诊断工具)

关于powershell - Powershell if语句中的多个WMIC命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com