因此,在PowerShell中,我终于弄清楚了如何读取两个变量,执行WMI查询以及将三个变量写入CSV文件。我希望在当前工作目录中创建导出的csv文件,但是我在C:\ Windows \ system32中找到它。我相信这些是我代码中的相关代码;让我知道您是否需要更多:
$resultfile = ".\Check-Results.csv"
$csv = "<$server>,<$service>,<$status>`r`n"
<ping check, foreach loop, wmi query here, etc...>
$csv +=$server + "," + $service + "," + $status + "`r`n"
$fso = New-Object -ComObject scripting.filesystemobject
$file = $fso.CreateTextFile($resultfile,$true)
$file.write($csv)
$file.close()
我的理解是,将斜杠将是在PWD中获取结果文件所需要的全部,但是我想不是。顺便说一句,我的脚本必须与PS 2.0兼容,所以我不能只执行Export-CSV -append。
对于alroc:我的脚本正在执行的操作是使用Import-CSV从csv文件获取服务器名称和PortWWN。然后,我在foreach循环中遍历服务器列表,以查询WMI以查找与PortWWN匹配的Emulex端口,然后提取端口状态(“链接断开”,“可操作”等)。
因此,我从Import-CSV中的两个变量开始,即$ server和$ wwn,最后是三个变量,$ server,$ wwn和$ status。这三个变量需要写入一个新的CSV文件中。我知道PS 2.0具有Export-CSV,但是它没有-append参数-这是3.0功能。因此,我的早期结果仅显示循环中的最后一个结果。
我从脚本专家那里得到了fsobjects的想法,很高兴看到结果完美地工作,除了文件不在我期望的位置。该脚本必须由相对缺乏经验的PS用户运行,因此必须相当防白痴。他们将把脚本和源CSV文件复制到装有PS 2.0的计算机上,运行脚本,然后查看结果文件,我希望所有内容都放在一个地方。
没错,斜杠将其保存在当前工作目录中。每个进程都有一个当前的工作目录,而powershell并没有什么不同,因此要查看它是“真实的”当前工作目录,可以执行以下操作:
Write-Host ([System.Environment]::CurrentDirectory)
但是,Powershell的特殊之处在于,您在提示符下看到的位置是当前提供程序的位置。这就是为什么您输入类似以下内容的原因:
cd cert:
系统将提示您以下内容:
PS Cert:\>
此“ cert:\”驱动器不是“真实”位置,因此无法设置为进程的当前工作目录。这就是为什么powershell拥有自己的(位置)以及处理当前工作目录的原因,尽管您只能看到前者。
Cmdlet通常设计为使用Powershell的位置,但是如果您直接使用.NET类或调用第三方程序,则当前的工作目录将是Powershell进程的目录。如果您想知道CSV的保存位置,请在脚本中添加以下内容:
Write-Host ([System.Environment]::CurrentDirectory)
或者,如果您当前的powershell位置是实际的文件系统位置,则可以使用以下命令将进程的当前工作目录设置为powershell的位置:
[System.Environment]::CurrentDirectory = Get-Location
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句