gpt4 book ai didi

powershell - 复制项是否更改PowerShell中目标参数的类型

转载 作者:行者123 更新时间:2023-12-02 23:41:25 26 4
gpt4 key购买 nike

我希望这是一个愚蠢的错误,而我却忽略了一些非常简单的事情。我具有映射网络驱动器并将网络驱动器的内容复制到目标位置的功能。最后,我返回目标路径以供以后使用。但是,它似乎正在为目标路径返回不同类型的对象。以下是代码段:

  function CopyDropFolder {
param(
[string] $dropFolder,
[string] $releaseName,
[string] $mapDrive
)

$stageDirectory= $('c:\temp\' + $releaseName + '-' + (Get-Date -Uformat %Y%m%d-%H%M).ToString() + '\')
[string]$destinationDirectory = $stageDirectory
Write-Host 'Mapping Folder ' $dropFolder ' as ' $mapDrive
MountDropFolder -mapfolder $dropFolder -mapDrive $mapDrive

$sourceDir = $mapDrive + ':' + '\'
Write-Host 'Copying from mapped drive (' $sourceDir ') to ' $stageDirectory
Copy-Item $sourceDir -Destination $stageDirectory -Recurse
Write-Host $destinationDirectory
return $destinationDirectory
}

我将函数调用如下:
$stageDirectory = CopyDropFolder -dropFolder $mapFolder -releaseName $releaseName -mapDrive $newDrive
Write-Host 'Staged to ' $stageDirectory

函数(Write-Host $ destinationDirectory)的输出为:
c:\temp\mycopieddirectory-20161228-1422\

但是,从进行调用的主脚本中,输出为:
Staged to  Z c:\temp\mycopieddirectory-20161228-1422\

似乎返回的stageDirectory变量以某种方式映射到Z ::这是在函数内映射的新驱动器。

关于如何只返回函数中上面打印的路径的任何想法?

最佳答案

PowerShell具有管道的概念。调用的所有返回值的值都不会分配给变量或管道e。 G。该函数将返回Out-Null cmdlet(即使您未明确使用return关键字)。因此,您应该将函数内的输出通过管道传递给Out-Null:

 function CopyDropFolder {
param(
[string] $dropFolder,
[string] $releaseName,
[string] $mapDrive
)

$stageDirectory= $('c:\temp\' + $releaseName + '-' + (Get-Date -Uformat %Y%m%d-%H%M).ToString() + '\')
[string]$destinationDirectory = $stageDirectory
Write-Host 'Mapping Folder ' $dropFolder ' as ' $mapDrive
MountDropFolder -mapfolder $dropFolder -mapDrive $mapDrive | Out-Null

$sourceDir = $mapDrive + ':' + '\'
Write-Host 'Copying from mapped drive (' $sourceDir ') to ' $stageDirectory
Copy-Item $sourceDir -Destination $stageDirectory -Recurse | Out-Null
Write-Host $destinationDirectory
return $destinationDirectory
}

另外,您可以像这样重构您的方法:
function Copy-DropFolder 
{
[CmdletBinding()]
param
(
[string] $dropFolder,
[string] $releaseName,
[string] $mapDrive
)

$stageDirectory = Join-Path 'c:\temp\' ('{0}-{1}' -f $releaseName, (Get-Date -Uformat %Y%m%d-%H%M).ToString())

MountDropFolder -mapfolder $dropFolder -mapDrive $mapDrive | Out-Null
Copy-Item "$($mapDrive):\" -Destination $stageDirectory -Recurse | Out-Null

$stageDirectory
}

三个主要改进:
  • 使用批准的动词(Copy-DropyFolder)
  • 使用Join-Path cmdlet
  • 删除了Write-Host输出(您会发现很多文章,为什么不应该使用Write-Host)。
  • 关于powershell - 复制项是否更改PowerShell中目标参数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41369382/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com