我正在运行一个脚本,它将解析一个相对较大的 csv。根据它运行的机器,它会搜索不同的东西。
我对powershell相当陌生,所以我不确定最有效的方法是什么。最好将所有内容保存在一个文件中,因为我希望能够让所有机器调用相同的脚本。
我在想可能是一个 case 语句将 $env:computername 与我将运行它的机器的名称相匹配?
我正在运行一个脚本,它将解析一个相对较大的 csv。根据它运行的机器,它会搜索不同的东西。
我对powershell相当陌生,所以我不确定最有效的方法是什么。最好将所有内容保存在一个文件中,因为我希望能够让所有机器调用相同的脚本。
我在想可能是一个 case 语句将 $env:computername 与我将运行它的机器的名称相匹配?
如果逻辑总是解析 .csv 文件并且不同的是匹配模式 ,我将使用基于主机名的switch 语句来设置我稍后将在脚本逻辑中使用的所有变量。如果逻辑也需要根据主机名进行更改,我将在 switch 语句中设置它们一些 脚本块,以便稍后在脚本逻辑中调用。
例子:
$a = hostname
switch ($a)
{
"WS001" { $sb = {dir} ; $txt = "Computer name: " + $a }
"WS003" { $sb = { get-process } ; $txt = "Computer name: " + $a }
default { $sb = $null ; $txt = "This Computer can't run this script"}
}
if ($sb) { &$sb }
$txt
@Christian 对答案的一个小补充。
在每个主机名的脚本块的末尾,您可能需要考虑添加一个 break 语句。这样您就可以避免针对所有可能的主机测试 $a - 一旦您找到主机并执行主机特定的操作,Break 语句会将您跳出 Switch 的脚本块。
因此它可能看起来像这样:
$a = hostname
switch ($a)
{
"WS001" { $sb = {dir} ; $txt = "Computer name: " + $a ; break }
"WS003" { $sb = { get-process } ; $txt = "Computer name: " + $a; break }
default { $sb = $null ; $txt = "This Computer can't run this script"}
}
...