【问题标题】:Powershell to remove all file extensions in sharepoint online library through mapped network drivePowershell通过映射网络驱动器删除sharepoint在线库中的所有文件扩展名
【发布时间】:2020-11-02 15:33:47
【问题描述】:

您好,提前感谢您的帮助。我正在尝试删除由于安全漏洞而添加到库中文档的额外扩展名。当我手动删除扩展名“.easy2lock”时,文件变为可用。但是,当我尝试通过 powershell 以编程方式执行此操作时,它可以工作,但不适用于具有长路径的文件夹。有谁知道如何在 powershell 中解决这个问题?

我已经尝试更新我的注册表以允许长路径,但是,我认为这不会对 这是我收到的脚本和错误:

[string]$DeleteBadExtension = ".easy2lock_read_me"
[string]$BadExtension = ".easy2lock"
Get-ChildItem -Filter "*$BadExtension" -Recurse | Rename-Item -NewName {$_.Name -replace $BadExtension, [string]::Empty}
Get-ChildItem *$DeleteBadExtension -Recurse | foreach { Remove-Item -Path $_.FullName }

【问题讨论】:

    标签: powershell sharepoint sharepoint-online network-drive


    【解决方案1】:

    我必须相信你的话,这些文件在更改名称后仍然可用,这不是我的经验。为了能够在 powershell 中访问长路径,您需要使用 -LiteralPath 参数。不幸的是,-Path 参数将是管道时使用的默认值。 -LiteralPath 确实通过 propertyname 接受管道输入,因此您可以像这样操作对象删除路径并添加文字路径

    Get-ChildItem -Filter "*$BadExtension" -Recurse |
        Select-Object Name,Basename,Extension,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
            Rename-Item -NewName {$_.Name -replace $BadExtension}
    

    或者您可以使用Foreach-Object 或foreach 循环并使用所需的语法\\?\ 作为路径。

    Get-ChildItem -Filter "*$BadExtension" -Recurse | Foreach-Object {
        Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName ($_.Name -replace ‘$BadExtension’)
    }
    

    编辑

    由于基本名称是所需的文件名(只是没有不需要的扩展名),您可以使用基本名称作为新名称。所有四个示例都经过测试并确认可以工作。如果它不适合你,那么还有其他事情发生。

    Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
        Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName ($_.name -replace $BadExtension)
    }
    
    Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
        Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName $_.basename
    }
    
    Get-ChildItem -Filter "*$BadExtension" -Recurse |
        Select-Object Name,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
            Rename-Item -NewName {$_.Name -replace $BadExtension}
    
    Get-ChildItem -Filter "*$BadExtension" -Recurse |
        Select-Object Basename,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
            Rename-Item -NewName {$_.baseName}
    

    【讨论】:

    • 感谢您的快速回复。您提供的脚本出现以下错误,“无法评估参数'newname',因为它的参数被指定为脚本块并且没有输入”
    • 我注意到的另一件有趣的事情是,在我的原始脚本中,remove-item 路径工作得很好,但重命名却不行。这个有效: [string]$DeleteBadExtension = ".easy2lock_read_me" Get-ChildItem *$DeleteBadExtension -Recurse | foreach { Remove-Item -Path $_.FullName }
    • 我编辑了我的答案,我目前无法测试,所以让我知道这是否有效
    • 不走运,这是我得到的错误:“文件名、目录名或卷标语法不正确”。根据我的研究,第二期可能会绊倒它。例如,我的文档如下所示:MyDocument.xlsx.easy2lock
    • 我对普通文件和文件夹的测试适用于这两个示例。我必须制作一个像你这样的文件并用它进行测试。尝试将字符串删除为空。当您只是使用 replace 删除某些内容时,可以省略第二个参数。所以只需 ($_.name -replace $Badextension)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2018-07-18
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多