powershell从用户获取文件位置

时间:2018-01-29 04:34:38

标签: powershell automation cmdlets copy-item

您好我正在尝试将某些内容自动化以进行测试。我有一个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打印样本文件的实际位置!

1 个答案:

答案 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不再“杀死小狗”。数据是   捕获到信息流

     

启动过程   'https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Write-Information?view=powershell-5.1'

     

描述

     

Write-Information cmdlet指定Windows PowerShell的处理方式   命令的信息流数据。

     

Windows PowerShell 5.0引入了新的结构化信息流   (可以用于传输的Windows PowerShell流中的数字6)   脚本与其调用者(或托管者)之间的结构化数据   环境)。 Write-Information允许您添加信息性消息   到流,并指定Windows PowerShell如何处理信息   流命令的数据。