【问题标题】:How can I copy from local to a remote location with credentials in PowerShell?如何使用 PowerShell 中的凭据从本地复制到远程位置?
【发布时间】:2012-10-25 17:13:51
【问题描述】:

我是 PowerShell 的新手。

我有用户名和密码可以访问远程位置的共享文件夹。

我需要在为 Powershell v3.0 编写的 PS1 脚本中将文件 foo.txt 从当前位置复制到 \\Bar.foo.myCOmpany.com\logs

我怎样才能做到这一点?

【问题讨论】:

  • 远程位置是网络共享还是ftp文件夹?

标签: .net powershell powershell-3.0


【解决方案1】:

Copy-Item 不支持 -credential 参数,会出现这个参数 但它不受任何 Windows PowerShell 核心 cmdlet 或提供程序的支持”

您可以尝试以下功能来映射网络驱动器并调用复制

Function Copy-FooItem {

param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$True)]
        [string]$username,
        [Parameter(Mandatory=$true,ValueFromPipeline=$True)]
        [string]$password
        )

$net = New-Object -com WScript.Network
$drive = "F:"
$path = "\\Bar.foo.myCOmpany.com\logs"
if (test-path $drive) { $net.RemoveNetworkDrive($drive) }
$net.mapnetworkdrive($drive, $path, $true, $username, $password)
copy-item -path ".\foo.txt"  -destination "\\Bar.foo.myCOmpany.com\logs"
$net.RemoveNetworkDrive($drive)

}

这里是运行函数的方法,只需更改用户名和密码的参数

Copy-FooItem -username "powershell-enth\vinith" -password "^5^868ashG"

【讨论】:

  • 我需要在目标服务器之前和/或之后关闭连接吗?上网的时候发现有必要吗?
  • 无论如何,我在尝试此操作时遇到错误:rrorMessage:文件系统提供程序仅在 New-PSDrive cmdlet 上支持凭据。在不指定凭据的情况下再次执行操作..Exception.Message At line:1 char:1
  • 您好,现在试试 Copy-Item 不支持 -credential 参数,确实会出现此参数,但任何 Windows PowerShell 核心 cmdlet 或提供程序都不支持它”我们可以映射网络驱动器并制作它有效,请尝试让我知道
【解决方案2】:

我会使用 BITS。后台智能传输服务。

如果没有为您的会话实现 BitsTransfer 模块:

Import-Module BitsTransfer

使用它使用凭据传输文件的示例:

$cred = Get-Credential()
$sourcePath = \\server\example\file.txt
$destPath = C:\Local\Destination\
Start-BitsTransfer -Source $sourcePath -Destination $destPath -Credential $cred

警告:如果您在 RemotePS 会话中执行脚本,则不支持 BITS。

获取 Start-BitsTransfer 的帮助:

语法

 Start-BitsTransfer [-Source] <string[]> [[-Destination] <string[]>] [-Asynchronous] [-Authentication <string>] [-Credential <PS
Credential>] [-Description <string>] [-DisplayName <string>] [-Priority <string>] [-ProxyAuthentication <string>] [-ProxyBypass
 <string[]>] [-ProxyCredential <PSCredential>] [-ProxyList <Uri[]>] [-ProxyUsage <string>] [-RetryInterval <int>] [-RetryTimeou
t <int>] [-Suspended] [-TransferType <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

更多帮助...

这是创建 $cred 对象的脚本,因此不会提示您输入用户名/密码:

    #create active credential object
    $Username = "user"
    $Password = ConvertTo-SecureString ‘pswd’ -AsPlainText -Force
    $cred = New-Object System.Management.Automation.PSCredential $Username, $Password

【讨论】:

    【解决方案3】:

    你可以试试:

    copy-item -path .\foo.txt  -destination \remoteservername\logs -credential (get-credential)
    

    【讨论】:

    • 但是我在哪里传递用户名和密码呢?
    • get-credential 打开一个输入用户名和密码的窗口。您需要从文件中读取它们吗?
    • 阅读这个 SO 答案:stackoverflow.com/questions/6239647/…
    • 这只是给我一个错误“文件系统提供程序仅在 New-PSDrive cmdlet 上支持凭据”
    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多