我正在尝试在当前目录中输出CSV,但是在与已存在的$ ComputerName匹配的文件夹中。我正在为一个机器列表定期执行此操作,而不是手动将它们放在它们的文件夹中,在脚本中执行此操作会非常棒。
这是当前代码,写入脚本目录。
#writing file to
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
Write-Host ("Saving CSV Files at " + [Environment]::CurrentDirectory + " Named the following.")
Write-Host $PritnersFilename
我尝试将$ ComputerName添加到各个位置并且没有运气。
示例:
Write-Host ("Saving CSV Files at " + [Environment]::CurrentDirectory\$ComputerName + " Named the following.")
Write-Host ("Saving CSV Files at " + [Environment]::(CurrentDirectory\$ComputerName) + " Named the following.")
编辑:$ ComputerName是目标的变量,而不是本地主机
答案 0 :(得分:1)
如果我看到整个代码会更容易。但我做了一个例子,因为我觉得解释它会更容易,因为我不知道你从哪里得到你的变量。
非常简单,它循环通过计算机,如果当前文件夹中没有名为$ computername的文件夹,则会创建一个。然后,您的导出代码会将计算机数据导出到我们刚刚创建的文件夹。
关键部分:使用“。\”与当前文件夹相同。
cd C:\Scriptfolder\
# computer variables for example
$computers = @()
$computers += "HOST1"
$computers += "HOST2"
$computers += "HOST3"
# looping through all objects
Foreach($computer in $computers){
# creating folder named after computername if one doesn't exist
if(!(Test-Path ".\$computer")){
New-Item -ItemType Directory -Name $computer -Path ".\"
}
# output path with computername in it
$outputpath = ".\$computer\output.csv"
# your export code
$computer | Export-CSV $outputpath
}
答案 1 :(得分:1)
[Environment]::CurrentDirectory\$ComputerName
由于位于(...)
内且被用作+
运算符的操作数,因此在表达式模式下进行解析导致语法错误。
有关PowerShell解析模式的概述,请参阅我的this answer。
您需要使用"..."
(可扩展的字符串)来执行字符串连接,使用子表达式运算符$(...)
嵌入表达式[Environment]::CurrentDirectory
并嵌入对变量的引用直接$ComputerName
。
"$([Environment]::CurrentDirectory)\$ComputerName"
有关PowerShell中字符串扩展(字符串插值)的概述, 见我的this answer。
或者,您也可以使用带有+
的表达式(或者甚至混合使用这两种方法):
# Enclose the whole expression in (...) if you want to use it as a command argument.
[Environment]::CurrentDirectory + '\' + $ComputerName
注意:最强大(尽管速度较慢)的构建文件系统路径的方法是使用 Join-Path
cmdlet :
# Enclose the whole command in (...) to use it as part of an expression.
Join-Path ([Environment]::CurrentDirectory) $ComputerName
请注意(...)
周围[Environment]::CurrentDirectory
需要确保将其识别为表达式。否则,由于该命令是在参数模式下解析的,因此[Environment]::CurrentDirectory
将被视为 literal 。