这是Powershell脚本的一小部分,为了递归获取所有文件夹/子文件夹和文件,我无法使用Get-ChildItem
,因为它在UNC网络路径上太慢了,所以我的想法是使用{{ 1}}使用PSSession远程执行,它可以工作。
使用PsSession远程执行此代码,我的try / catch语句工作正常,我可以将结果导入[Microsoft.VisualBasic.FileIO.FileSystem]::GetFiles
变量。
$GetRemoteFolderCheck
但是当我在不使用PSSession的情况下在本地执行相同的代码时,它不起作用,它会破坏我的代码...因为我的shell中没有显示$path_folder = "C:\sources\sql"
$session = New-PSSession -ComputerName $ipsqlserver -Credential $credentials
Invoke-Command -Session $session -ScriptBlock {
[reflection.assembly]::loadwithpartialname("Microsoft.VisualBasic") | Out-Null
}
$GetRemoteFolderCheck = Invoke-Command -Session $session -ScriptBlock {
try
{
[Microsoft.VisualBasic.FileIO.FileSystem]::GetFiles(
$using:path_folder,
[Microsoft.VisualBasic.FileIO.SearchOption]::SearchAllSubDirectories)
}
catch
{
return $_
}
}
Write-Host
我不明白为什么它没有按预期工作,我的$path_folder = "C:\sources\sql"
$GetLocalFolderCheck = try{[Microsoft.VisualBasic.FileIO.FileSystem]::GetFiles(
$path_folder,
[Microsoft.VisualBasic.FileIO.SearchOption]::SearchAllSubDirectories) }
catch
{
return $_
}
Write-Host "toto"
应该包含异常,而不是破坏我的代码。
感谢您的帮助
答案 0 :(得分:2)
因为您使用的是return
语句,所以这是预期的行为。无论您的呼叫是成功还是抛出错误,都会返回一个值,因此Write-Host "toto"
无法访问。如果是这个C#代码,就会出现编译警告Unreachable code detected
。
您应该能够通过将catch块更改为:
来实现所需的结果...
catch
{
$_
}
...
这种方式如果出现错误,它将作为对象传递给管道并继续执行。