通过powershell一次重新启动一台AD计算机

通过powershell一次重新启动一台AD计算机,powershell,Powershell,我需要一次重新启动AD中的所有计算机(不包括我的计算机),在重新启动下一台计算机之前确认每个计算机都已重新启动。系统重新启动后,我想查看它的IP地址和名称。下面是我的尝试,但我认为我做错了什么,因为它不起作用。我收到的主要错误是: Get-WMIObject: cannot validate argument on parameter 'computerName'. The argument is null or empty + $serverobj = gmi Win32_operatin

我需要一次重新启动AD中的所有计算机(不包括我的计算机),在重新启动下一台计算机之前确认每个计算机都已重新启动。系统重新启动后,我想查看它的IP地址和名称。下面是我的尝试,但我认为我做错了什么,因为它不起作用。我收到的主要错误是:

 Get-WMIObject: cannot validate argument on parameter 'computerName'. The argument is null or empty
 + $serverobj = gmi Win32_operatingsystem -computername $i.server
代码:

对于您眼前的问题,这一点似乎足够简单:

$serverObj = gwmi Win32_operatingsystem -computer $i.server
应该是

$serverObj = gwmi Win32_operatingsystem -computer $i
$i
没有超出
[string]
的属性。默认情况下,PowerShell将允许您尝试获取不存在的属性,在这种情况下将返回null<代码>获取WMIObject,但是无法使用参数
-计算机的WMIObject。这个错误相当具体

有一种方法可以尝试捕捉这些问题,但可以使用
Set-StrictMode-Version 2.0
。从

2.0

--禁止引用未初始化的变量(包括字符串中的未初始化变量)

--禁止引用对象的不存在属性

--禁止使用用于调用方法的语法的函数调用

--禁止没有名称(${})的变量


您指的是您收到的主要错误。。。这是不是意味着你还有更多

您的
,而
状况似乎有缺陷。您应该尝试计算布尔表达式,但您只是返回数据。即使ping失败的数据应该被返回,这可能会使循环的逻辑失效。考虑使用开关<代码>静默<代码> >代码>测试连接< /代码>。您还将检查所有
$server
的ping,而不仅仅是
$i

while (!(Test-Connection $i -count 1 -Quiet))
也许…

对于您眼前的问题,这一点似乎足够简单:

$serverObj = gwmi Win32_operatingsystem -computer $i.server
应该是

$serverObj = gwmi Win32_operatingsystem -computer $i
$i
没有超出
[string]
的属性。默认情况下,PowerShell将允许您尝试获取不存在的属性,在这种情况下将返回null<代码>获取WMIObject
,但是无法使用参数
-计算机的WMIObject。这个错误相当具体

有一种方法可以尝试捕捉这些问题,但可以使用
Set-StrictMode-Version 2.0
。从

2.0

--禁止引用未初始化的变量(包括字符串中的未初始化变量)

--禁止引用对象的不存在属性

--禁止使用用于调用方法的语法的函数调用

--禁止没有名称(${})的变量


您指的是您收到的主要错误。。。这是不是意味着你还有更多

您的
,而
状况似乎有缺陷。您应该尝试计算布尔表达式,但您只是返回数据。即使ping失败的数据应该被返回,这可能会使循环的逻辑失效。考虑使用开关<代码>静默<代码> >代码>测试连接< /代码>。您还将检查所有
$server
的ping,而不仅仅是
$i

while (!(Test-Connection $i -count 1 -Quiet))

也许…

有什么错误?他们可能对你“清楚”,但你是你的唯一在你的控制台,我们看不到他们。我道歉。我不是指错误。那么,“不工作”是什么意思呢?什么不起作用?什么在起作用?服务器是否没有重新启动?脚本是否会在不等待的情况下重新启动所有内容?脚本是否重新启动了错误的计算机?IP地址没有显示吗?嘿,我添加了错误。另外,我对powershell还相当陌生!错误是什么?他们可能对你“清楚”,但你是你的唯一在你的控制台,我们看不到他们。我道歉。我不是指错误。那么,“不工作”是什么意思呢?什么不起作用?什么在起作用?服务器是否没有重新启动?脚本是否会在不等待的情况下重新启动所有内容?脚本是否重新启动了错误的计算机?IP地址没有显示吗?嘿,我添加了错误。另外,我对powershell还相当陌生!嘿,马特!做出这样的改变修复了它,不再出现任何其他错误。但是,脚本只是在“重新启动成功”时卡住,不会测试连接并移动到下一台计算机。知道为什么吗?@NebelzCheez你可能错过了最近的一次编辑。看看我答案的底部。我认为你的“做”是有缺陷的。哦,我的错。我做了以下更改,脚本现在正在计算机中循环。但仍然没有显示测试连接语句的输出。(!(测试连接$i-count 1-Quiet |选择{Name=“Computername”;Expression={$\u.Address}},Ipv4Address))您可以在while语句中找到它。。。。在这种情况下,你不会看到它,也不会想看到它。如果你想要输出,那么do循环内部就是它的位置。嘿,马特!做出这样的改变修复了它,不再出现任何其他错误。但是,脚本只是在“重新启动成功”时卡住,不会测试连接并移动到下一台计算机。知道为什么吗?@NebelzCheez你可能错过了最近的一次编辑。看看我答案的底部。我认为你的“做”是有缺陷的。哦,我的错。我做了以下更改,脚本现在正在计算机中循环。但仍然没有显示测试连接语句的输出。(!(测试连接$i-count 1-Quiet |选择{Name=“Computername”;Expression={$\u.Address}},Ipv4Address))您可以在while语句中找到它。。。。在这种情况下,你不会看到它,也不会想看到它。如果您想要输出,那么do循环内部就是它的位置。