0

作为 PowerShell 的新手,我一直在遵循这些帖子中的一些指导,为主题中提到的内容编写脚本。

这是脚本:

Get-Content -Path C:\temp\Domain.txt | Restart-Computer -force | Where-Object { $._Name -notmatch "^(SERVER01)"}

这是错误:

Restart-Computer : Cannot validate argument on parameter 'ComputerName'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:1 char:40
+ ... et-Content -Path C:\temp\Domain.txt | Restart-Computer -force | Where ...
+                                           ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:PSObject) [Restart-Computer], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.RestartComputerCommand

作为参考,DOMAIN.txt 有一个会定期更改的服务器列表,因此如果某些服务器最终出现在列表中,我想跳过它们。

4

1 回答 1

0

该错误仅表示您的文本文件中有一个空行,您可以使用.Where(..)方法过滤行并在方法的帮助下排除空行或空白行[string]::IsNullOrWhiteSpace(..)。我已更改-notmach为收容操作员-notin

注意,-notin在集合中查找完全匹配$hostsToExclude

$hostToExclude = 'server1', 'server2'
(Get-Content -Path C:\temp\Domain.txt).Where({
    -not [string]::IsNullOrWhiteSpace($_) -and $_ -notin $hostToExclude
}) | Restart-Computer -Force

值得注意的是,在您的代码片段中,您要在过滤集合之前重新启动主机。Get-Content应紧随其后Where-Object

于 2022-01-26T20:53:08.360 回答