PowerShell函数返回值异常求助:返回值不符合预期
问题分析
你的问题根源在于PowerShell的输出流特性:Invoke-Command会收集远程脚本块内所有未被抑制的输出,而New-Item默认会返回创建的目录对象,这个输出会和你最后通过Write-Output返回的$createFolderResult一同被返回。因为目录对象的输出会被优先捕获,最终导致$serverResult拿到的是$Destination对应的目录对象,而非你预期的空字符串或错误信息。
解决方案
核心是抑制New-Item的默认输出,确保只有你定义的$createFolderResult被作为返回值输出。以下是三种可行的抑制方式:
方式1:重定向输出到$null
修改New-Item执行行:
New-Item -ItemType directory -Path $Destination > $null
方式2:使用[void]强制丢弃输出
[void](New-Item -ItemType directory -Path $Destination)
方式3:添加-OutVariable null参数
New-Item -ItemType directory -Path $Destination -OutVariable null
修改后的完整函数代码
#################### ### CreateFolder ### #################### function CreateFolder { Invoke-Command -Session $session -ArgumentList $Destination, $serv -ScriptBlock { param ( [string] $Destination, [string] $serv ) [string] $createFolderResult = '' try { if (-not ($Destination | Test-Path)) { Write-Host "INFO : Création du répertoire suivant en cours (fonction CreateFolder)... :" $Destination # 抑制New-Item的输出,避免干扰返回值 New-Item -ItemType directory -Path $Destination > $null Write-Host "INFO : La création du répertoire a été réalisée avec succès (fonction CreateFolder):" $Destination } else { Write-Host "INFO : Le répertoire :" $Destination "existe déjà (fonction CreateFolder)!" } } catch { Write-Host "ERREUR : La création du répertoire n'a pas fonctionné (fonction CreateFolder) : "$_ $createFolderResult = $serv +" : ERREUR : La création du répertoire n'a pas fonctionné (fonction CreateFolder) : " +$_ } Write-Output $createFolderResult } }
额外提示
PowerShell中,函数或脚本块的返回值是所有未被捕获的输出的集合,而非仅return或Write-Output指定的内容。任何命令的默认输出如果不做处理,都会混入最终的返回结果,这是PowerShell新手常见的误区。
内容的提问来源于stack exchange,提问作者Flincorp
相关产品推荐
相关产品推荐

