如何在powershell的“get-content command”中传递变量
Posted
技术标签:
【中文标题】如何在powershell的“get-content command”中传递变量【英文标题】:how to pass a variable in "get-content command " in powershell 【发布时间】:2019-12-30 07:01:06 【问题描述】:我必须从一个远程桌面获取特定文件到本地计算机或另一台服务器。如何在 get-content 中传递一个变量以从远程桌面连接获取文件?
我将文件路径存储为变量并尝试在 get-content 中传递它。
Invoke-Command -Computername $Server -ScriptBlockget-content -path $file
Invoke-Command -Computername $Server -ScriptBlockget-content -path $file
$file="C:\Users\Documents\new DB_connection\\log2.txt"
$Server="servername"
$answer= Invoke-Command -Computername $Server -ScriptBlockget-content -path $file
write-output $answer
无法将参数绑定到参数“路径”,因为它为空。 + CategoryInfo : InvalidData: (:) [Get-Content], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetContentCommand
【问题讨论】:
我试过这段代码 "Invoke-Command -Computername $Server -ScriptBlockget-content -path $file 但它再次显示同样的错误 一旦你给$file赋值,然后在脚本块内简单地使用$using:file。在定义之前,您不能将其传递到脚本块中 【参考方案1】:您可以通过 PSSession 复制文件,而不是使用 Invoke-Command
。从远程服务器复制到本地路径或不同的远程服务器:
$session = New-PSSession -ComputerName server.domain.tld
Copy-Item -Source $originatingServerFilePath -Destination $localOrUNCFilePath -FromSession $session
如果您需要将本地文件复制到目标服务器:
Copy-Item -Source $localFilePath -Destination $destinationServerFilePath -ToSession $session
虽然您运行该命令的服务器需要访问任何远程文件路径,但这样做的好处是不进行双跳。如果您需要将文件从一台服务器复制到另一台服务器,但目标服务器没有将文件路径公开为共享文件夹(或者您无权访问它),则不能指定 -ToSession
和 -FromSession
同时,因此您必须在本地复制文件并使用两个会话,如下所示:
$sourceSession = New-PSSession -ComputerName source.domain.tld
$destinationSession = New-PSSession -ComputerName destination.domain.tld
# Copy the remote file(s) from the source session to a local path first
Copy-Item -Source $sourceSessionFilePath -Destination $localTempFilePath -FromSession $sourceSession
# Copy the new local files to the destination session from your local path
Copy-Item -Source $localTempFilePath -Destination $destinationSessionFilePath -ToSession $destinationSession
【讨论】:
【参考方案2】:尝试在ScriptBlock
中定义变量$Server="servername"
$answer= Invoke-Command -Computername $Server -ScriptBlock
$file="C:\Users\Documents\new DB_connection\\log2.txt";
get-content -path $file
write-output $answer
【讨论】:
以上是关于如何在powershell的“get-content command”中传递变量的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell:如何在 PowerShell 中将数组对象转换为字符串?
如何在 powershell 远程会话(powershell)中编辑文件