将-Recurse选项添加到我的powershell脚本

将-Recurse选项添加到我的powershell脚本,powershell,Powershell,我有一个作用于单个文件系统项的函数,我想添加递归文件系统的功能作为一个选项,类似于Get ChildItems-recurse。 我读到GCI recurse遇到一个它没有读取权限的目录时出现问题,抛出异常并停止。我想知道最好的方法是什么 我应该 将管道添加到我的函数并执行:gci-递归$path |编辑我的详细信息-添加“我的评论” 在我的函数中添加一个递归开关,并在内部使用GCI实现目录递归:edit mydetails-recurse-Path c:\users\me\Documents\

我有一个作用于单个文件系统项的函数,我想添加递归文件系统的功能作为一个选项,类似于Get ChildItems-recurse。 我读到GCI recurse遇到一个它没有读取权限的目录时出现问题,抛出异常并停止。我想知道最好的方法是什么

我应该

  • 将管道添加到我的函数并执行:
    gci-递归$path |编辑我的详细信息-添加“我的评论”
  • 在我的函数中添加一个递归开关,并在内部使用GCI实现目录递归:
    edit mydetails-recurse-Path c:\users\me\Documents\MyProject-Add“my details”
  • 使用该条件逻辑块

    ...
        if ($Recurse) {
            gci -Recurse -Path $Path | % { do-stuff $_.Name }
        } else {
            do-stuff $Path
        }
    ...
    
  • 使用System.IO在文件系统中运行的其他更健壮的方法

  • 谢谢。

    您可以尝试一下:

    try{
     gci -Recurse -Path $Path | % { do-stuff $_.Name }
    catch{
     ### Filter out the bad folder and try again
        gci -Recurse -Path $Path -filter "Path -ne '$badPath'" | % { do-stuff $_.Name }
    }
    

    你可以试着抓住它:

    try{
     gci -Recurse -Path $Path | % { do-stuff $_.Name }
    catch{
     ### Filter out the bad folder and try again
        gci -Recurse -Path $Path -filter "Path -ne '$badPath'" | % { do-stuff $_.Name }
    }
    
    我读到GCI recurse遇到一个它没有读取权限的目录时出现问题,抛出异常并停止

    否:默认情况下,在遍历过程中遇到错误时不会停止:它发出非终止错误并继续

    您可以使用通用的
    -ErrorAction
    参数来修改该行为,特别是
    -ErrorAction SilentlyContinue
    来抑制错误显示,同时仍在自动
    $error
    变量中收集错误,
    -ErrorAction Ignore
    来完全安静地忽略错误,和
    -ErrorAction Stop
    ,在遇到第一个(非终止)错误时确实停止处理

    此外,您可以使用
    -ErrorAction
    收集指定变量中的所有错误,除非您还指定了
    -ErrorAction Ignore

    我应该: 将管道添加到我的函数并执行:
    gci-递归$path |编辑我的详细信息-添加“我的评论”

    是的,您应该:没有充分的理由在您的函数中复制
    Get ChildItem[-Recurse]
    的功能。相反,让函数通过管道接受
    [System.IO.FileInfo]
    输入和文件系统路径字符串(可选)

    我读到GCI recurse遇到一个它没有读取权限的目录时出现问题,抛出异常并停止

    否:默认情况下,在遍历过程中遇到错误时不会停止:它发出非终止错误并继续

    您可以使用通用的
    -ErrorAction
    参数来修改该行为,特别是
    -ErrorAction SilentlyContinue
    来抑制错误显示,同时仍在自动
    $error
    变量中收集错误,
    -ErrorAction Ignore
    来完全安静地忽略错误,和
    -ErrorAction Stop
    ,在遇到第一个(非终止)错误时确实停止处理

    此外,您可以使用
    -ErrorAction
    收集指定变量中的所有错误,除非您还指定了
    -ErrorAction Ignore

    我应该: 将管道添加到我的函数并执行:
    gci-递归$path |编辑我的详细信息-添加“我的评论”


    是的,您应该:没有充分的理由在您的函数中复制
    Get ChildItem[-Recurse]
    的功能。相反,让您的函数接受
    [System.IO.FileInfo]
    输入,还可以选择通过管道接受文件系统路径字符串。

    Get ChildItem
    仅会发出非终止错误(除非调用语法不正确),因此
    try
    /
    catch
    语句无效(除非您也使用了
    -ErrorAction Stop
    )。
    Get ChildItem
    只会发出非终止错误(除非调用语法不正确),因此
    try
    /
    catch
    语句无效(除非您也使用了
    -ErrorAction Stop
    )。