CSV文件保存在哪里?

时间:2014-11-17 21:06:35

标签: powershell csv

所以在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循环中的服务器列表,以查询与PortWWN匹配的Emulex端口的WMI,然后提取端口状态(Link Down,Operational等)

所以我从Import-CSV,$ server和$ wwn开始使用两个变量,最后得到三个变量,$ server,$ wwn和$ status。需要将三个变量写入新的CSV文件。我知道PS 2.0有Export-CSV,但它没有-append参数 - 这是3.0的功能。所以我的早期结果只显示循环中的最后一个结果。

我从The Scripting Guy得到了fsobjects的想法,很高兴看到结果完美无缺,除了文件不是我预期的结果。这个脚本必须由相对缺乏经验的PS用户运行,所以它必须是相当白痴的。他们将使用PS 2.0将脚本和源CSV文件复制到计算机,运行脚本,然后查看结果文件,我希望一切都在一个地方。

3 个答案:

答案 0 :(得分:1)

CSV文件保存在您告诉脚本保存的任何位置。在这种情况下,它将是您运行脚本的当前工作目录中的文件。

但是,您正在编写CSV,就像它是VBScript一样。你应该写PowerShell Way(tm)。它会更快,更清洁,更容易阅读。不幸的是,由于您没有显示您的脚本正在执行的操作的详细信息,因此我无法向您提供具体的建议,但您可能希望创建一个自定义PSObject包含为执行ping操作而执行的cmdlet的结果WMI数据(是您当前正在使用的方法),然后使用export-csv输出(在PowerShell 2.0中,因此您已覆盖在那里)

如果您坚持现在正在做的事情,您的输出应该通过以下内容(而不是FSO):

Set-Content -path $resultfile -force -value $csv

答案 1 :(得分:1)

你是正确的,点斜线会使它保存在当前工作目录中。每个进程都有一个当前的工作目录,而PowerShell也没有什么不同,所以要看到它真实的&#34;当前的工作目录,您可以执行以下操作:

Write-Host ([System.Environment]::CurrentDirectory)

然而,Powershell的特殊之处在于,您在提示时看到的位置是当前的提供商位置。这就是为什么你输入类似的东西:

cd cert:

您将获得以下提示:

PS Cert:\>

这&#34;证书:\&#34;驱动器不是真正的&#34; location和so不可能被设置为进程当前工作目录。这就是为什么powershell拥有它自己(位置)以及它处理当前工作目录的原因,尽管你只看到前者。

Cmdlet通常设计为使用powershell的位置,但如果直接使用.NET类或调用第三方程序,则当前工作目录将是powershell进程的目录。如果您想知道CSV的保存位置,请将以下内容添加到您的脚本中:

Write-Host ([System.Environment]::CurrentDirectory)

或者,如果您当前的powershell位置是实际的文件系统位置,那么您可以使用以下内容将进程当前工作目录设置为powershell的位置:

[System.Environment]::CurrentDirectory = Get-Location

答案 2 :(得分:0)

如果您从批处理文件中调用PowerShell,它通常会在C:\Windows\System32\开始,因为cmd.exe位于其中。

要设置运行脚本文件的位置,可以使用:

Set-Location $script:MyInvocation.MyCommand.Path

如果在PowerShell 2.0中不起作用,请尝试:

Set-Location $MyInvocation.MyCommand.Path

检查Get-Help about_Automatic_Variables以获取更多信息。这是PowerShell 4.0,但与2.0非常相似,我找不到旧的2.0参考。