在远程服务上复制文件的功能

Function to copy file on a remote service

我写了下面的函数来复制远程服务器上的文件

Function deploy-file{
PARAM(
    [Parameter(Mandatory=$true,Position=0)][STRING]$cred,
    [Parameter(Mandatory=$true,Position=1)][STRING]$server,
    [Parameter(Mandatory=$true,Position=2)][STRING]$destdir,
    [Parameter(Mandatory=$true,Position=3)][STRING]$file
)

    $parameters = @{
        Name = $server
        PSProvider = "FileSystem"
        Root = $destdir
        Credential = $cred
    }
    new-psdrive @parameters
    $d=$server + ":\"           
    copy-item $file $d -force
    
    remove-psdrive $server -ErrorAction SilentlyContinue
}

现在,我从主文件中调用上面的函数,如下所示:

$sn=abc.com
$server=($sn -split "\.")[0]
$destdir = 'e:\folder'
$file = 'file.zip'
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $usr, $pa
deploy-file $cred $server $destdir $file    

凭据没有问题。

我的脚本保持 运行,甚至没有抛出任何错误。脚本有什么问题?

Copying a file to a remote host 使用 PSSession 将如下所示:

function Deploy-File {
    [cmdletbinding()]
    param(
        [Parameter(Mandatory, Position=0)]
        [securestring] $cred,
        [Parameter(Mandatory, Position=1)]
        [string] $server,
        [Parameter(Mandatory, Position=2)]
        [string] $destdir,
        [Parameter(Mandatory, Position=3)]
        [string] $file
    )
    
    try {
        [IO.FileInfo] $file = Get-Item $file
        $session = New-PSSession -ComputerName $server -Credential $cred
        Copy-Item -Path $file -Destination $destdir -ToSession $session
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
    finally {
        if($session) {
            Remove-PSSession $session
        }
    }
}

通过查看您的代码很难判断可能会失败的原因,除了我们确定的错误之外,参数 $cred 被限制为 [string] 而实际上它应该是 [securestring]。这样做会使 PS Credential 对象无法使用。