【发布时间】:2014-07-01 22:43:23
【问题描述】:
这是一小段 Powershell 脚本,用于递归获取所有文件夹/子文件夹和文件,我不能使用 Get-ChildItem 因为它在 UNC 网络路径上太慢了,所以我的想法是使用 [Microsoft.VisualBasic.FileIO.FileSystem]::GetFiles 执行远程使用 PSSession,它可以工作。
使用 PsSession 远程执行此代码后,我的 try/catch 语句运行良好,我可以将结果放入 $GetRemoteFolderCheck 变量中。
$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 $_
}
}
但是当我在本地执行相同的代码而不使用 PSSession 时,它不起作用,它破坏了我的代码...因为 Write-Host 没有显示在我的 shell 中
$path_folder = "C:\sources\sql"
$GetLocalFolderCheck = try{[Microsoft.VisualBasic.FileIO.FileSystem]::GetFiles(
$path_folder,
[Microsoft.VisualBasic.FileIO.SearchOption]::SearchAllSubDirectories) }
catch
{
return $_
}
Write-Host "toto"
我不明白为什么它没有按预期工作,我的 $GetlocalFolderCheck 应该包含异常,并且没有破坏我的代码。
感谢您的帮助
【问题讨论】:
标签: .net powershell try-catch