Powershell:将主机写入当前目录/ $ computername

时间:2018-03-01 16:58:32

标签: powershell write-host

我正在尝试在当前目录中输出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是目标的变量,而不是本地主机

2 个答案:

答案 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