您好我正在尝试将某些内容自动化以进行测试。我有一个sample.xml文件,我需要将其传输到某个文件夹,这是由用户手动完成的。所以我试图通过powershell自动化。
文件位置应由用户选择,我想
Copy-Item -Path $ fileLocation -Destination $ dest
我写了这段代码,我尝试通过过滤器硬编码根路径并单独捕获文件的位置,我可以看到路径被正确打印但是它没有被Copy-Item接受。它抛出路径为空。
这是我写的那段代码
[CmdletBinding()]
Param(
[Parameter(Mandatory=$false)][string]$path
)
[string]$path = get-childitem -path "C:\Program Files (x86)\Demo\Sample" -Filter POsample01.xml -recurse | % {Write-Host $_.FullName}
Write-Host $path
Copy-Item -Path $path -Destination "D:\powershell"
write-host打印样本文件的实际位置!
答案 0 :(得分:0)
为什么用户需要手动执行此操作?
如果配置了PoSH Remoting,并且您是管理员,则可以远程导航文件系统,然后可以远程复制/移动文件。
Invoke-Command -ComputerName 'SomeTaregHostname' -ScriptBlock {
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$false)][string]$path
)
[string]$path = get-childitem -path "C:\Program Files (x86)\Demo\Sample" -Filter POsample01.xml -recurse | % {$_.FullName}
$path
Copy-Item -Path $path -Destination "D:\powershell"
}
您也不应该只使用Write-Host输出到屏幕,因为这不是真正需要的。好吧,除非你用它来显示彩色文字。默认输出到屏幕。
如果你需要在管道中发送内容,那么Write-Host会清除缓冲区并且你没有任何东西要发送。所以,记住这个......
如果要使用管道(将信息/对象传递给其他东西) - 切勿使用Write-Host。
如果您以真正自动化的方式执行此操作,则此类事情对用户不可见。
写主机被认为是有害的 - 由PowerShell创始人Jeffrey Snover
启动过程 'http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful'
当您编写或查看PowerShell脚本时,我希望您这样做 请记住以下经验法则:
◾使用Write-Host几乎总是错误的。
Write-Host几乎总是错误的,因为它 干扰自动化。通常有两个原因 人们使用Write-Host:
该主题中有许多其他文章。在早期版本中 PoSH,Write-Host无法在管道中使用,因为你使用的时刻 数据从缓冲区消失了。
然而,在PoSHv5中,Jeffrey Snover现在说......
使用PowerShell v5 Write-Host不再“杀死小狗”。数据是 捕获到信息流
描述
Write-Information cmdlet指定Windows PowerShell的处理方式 命令的信息流数据。
Windows PowerShell 5.0引入了新的结构化信息流 (可以用于传输的Windows PowerShell流中的数字6) 脚本与其调用者(或托管者)之间的结构化数据 环境)。 Write-Information允许您添加信息性消息 到流,并指定Windows PowerShell如何处理信息 流命令的数据。