1

我正在尝试编写一个脚本,当用户输入地理位置时,从 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,这似乎并没有改变“服务器名”的存在和输出中的分隔线.

也许这只是无法完成 - 但是如果可以的话,它将允许我以最少的麻烦编写一个易于使用的脚本,并且无需将有问题的服务器名称硬编码到其中(如果它们更改很有用)。有任何想法吗?

4

1 回答 1

0

我看不到链接的答案实际上是如何解决您的问题的。

而不是仅仅做select servername,你必须做select -expand servername,它会“扩展”属性并单独返回它而不是返回具有该属性的对象。

于 2013-09-19T11:52:39.377 回答