我正在尝试编写一个脚本,当用户输入地理位置时,从 csv 文件中提取有关本地服务器的信息(csv 分为两列,“位置”和“服务器名称”)。foreach-object
我认为在使用带有 wmi的命令时我已经取得了一些成功,如下例所示:
$l = (read-host "Enter Location")
import-csv -path C:\users\reillyf\desktop\location.csv | where {$_.location -eq $l} | select -property servername | foreach-object { get-wmiobject win32_printer} | Select Name, ShareName,PortName,DriverName
但是,这只是显示本地主机的值,没有错误(get-wmiobject
通常不接受管道输入,这就是为什么这不起作用)。我最初的想法是将 的输出存储import-csv -path C:\users\reillyf2\desktop\location.csv | where {$_.location -eq $l} | select -property servername
在一个变量中,然后将该变量放入一个参数中,但这总是会产生一个错误,指出该参数包含一个为空的值。如果您查看这样一个变量的内容,就可以看出为什么会发生这种情况:
PS C:\Users\reillyf> $l = (read-host "Enter Location")
$server = import-csv -path C:\users\reillyf\desktop\location.csv | where {$_.location -eq $l} | select -property servername
Enter Location: York
PS C:\Users\reillyf> $server
servername
----------
SHCGBY01DC01
似乎因为获得的结果不是字符串,所以不能将其放入参数或通过管道传输到 cmdlet。有什么方法可以将其转换为一个简单的文本字符串,该字符串可以放入read-host
我使用过的命令(如由创建的变量)中convertfrom-csv
,这似乎并没有改变“服务器名”的存在和输出中的分隔线.
也许这只是无法完成 - 但是如果可以的话,它将允许我以最少的麻烦编写一个易于使用的脚本,并且无需将有问题的服务器名称硬编码到其中(如果它们更改很有用)。有任何想法吗?