Powershell通过映射的网络驱动器删除sharepoint在线库中的所有文件扩展名

问题描述

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

enter image description here

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

enter image description here

use Digest::SHA1  qw(sha1 sha1_hex sha1_base64);
$digest = sha1_base64("abcd£");
print $digest;
print "\n";

解决方法

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

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}