Powershell循环以写入受密码保护的文件
我正在尝试将excel文件读入Powershell,打开,对其进行密码保护并将其写回。我可以单独执行,但在循环中脚本失败:Powershell循环以写入受密码保护的文件,powershell,loops,Powershell,Loops,我正在尝试将excel文件读入Powershell,打开,对其进行密码保护并将其写回。我可以单独执行,但在循环中脚本失败: #working individually $f = ("C:my\path\Out Files\1234dv.xlsx") $outfile = $f.FullName + "out" $xlNormal = -4143 $xl = new-object -comobject excel.application $xl.Visible = $True $xl.D
#working individually
$f = ("C:my\path\Out Files\1234dv.xlsx")
$outfile = $f.FullName + "out"
$xlNormal = -4143
$xl = new-object -comobject excel.application
$xl.Visible = $True
$xl.DisplayAlerts = $False
$wb = $xl.Workbooks.Open($f)
$a = $wb.SaveAs("C:my\path\Out Files\test.xls",$xlNormal,"test")
$a = $xl.Quit()
$a = Release-Ref($ws)
$a = Release-Ref($wb)
$a = Release-Ref($xl)
#not working in loop, error after
function Release-Ref ($ref) {
([System.Runtime.InteropServices.Marshal]::ReleaseComObject(
[System.__ComObject]$ref) -gt 0)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
foreach ($f in Get-ChildItem "C:\my\path\Out Files"){
$ff = $f
$outfile = $f.FullName + "out"
$xlNormal = -4143
$xl = new-object -comobject excel.application
$xl.Visible = $True
$xl.DisplayAlerts = $False
$wb = $xl.Workbooks.Open($ff)
$a = $wb.SaveAs("C:\my\path\Out Files\test.xls",$xlNormal,"test")
$a = $xl.Quit()
$a = Release-Ref($ws)
$a = Release-Ref($wb)
$a = Release-Ref($xl)
}
很抱歉,我们找不到1234dv.xlsx。有没有可能它被移动了,
重命名还是删除?第16行字符:5
+$wb=$xl.Workbook.Open($ff)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+类别信息:操作停止:(:)[],COMException
+FullyQualifiedErrorId:System.Runtime.InteropServices.COMException COM对象,该对象已
不能使用与其基础RCW分离的。第17行字符:5
+$a=$wb.SaveAs(“C:\my\path…”。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:OperationsStopped:(:)[],InvalidComObject异常
+FullyQualifiedErrorId:System.Runtime.InteropServices.InvalidComObject异常
这个错误在我处理的所有四个测试文件中都会重复
我对Powershell不是很熟悉,所以我依赖MS docs,我无法用python对文件进行密码保护,所以我认为这样做会更简单。我知道这也不能解决密码问题,但我会先尝试让循环工作。如果有任何帮助,我将不胜感激。谢谢。您应该使用
$wb = $xl.Workbooks.Open($ff.FullName)
为Excel提供完整的文件路径。否则,$ff
是需要字符串(路径)的FileInfo对象
至于密码保护,我建议你可以帮你。你应该使用
$wb = $xl.Workbooks.Open($ff.FullName)
为Excel提供完整的文件路径。否则,$ff
是需要字符串(路径)的FileInfo对象
至于密码保护,我建议您可以帮助您。对于您的问题,请稍微偏离主题,但不是出于您的意图: 从安全角度来看,使用.xls密码不是安全的,它只是一种麻烦 如果您需要安全性,那么我建议您使用类似Azure信息保护的东西,它允许您加密文件,并仅与需要访问的人安全地共享文件 您仍然需要创建xls或.xlsx文件(或任何其他相关文件) 然后,您可以简单地将powershell循环到它们上面:
PS C:\>foreach ($file in (Get-ChildItem -Path \\server1\Docs -Recurse -Force |
where {!$_.PSIsContainer} |
Where-Object {$_.Extension -eq ".xls"})) {
Protect-RMSFile -File $file.PSPath -InPlace -DoNotPersistEncryptionKey All -TemplateID "e6ee2481-26b9-45e5-b34a-f744eacd53b0" -OwnerEmail "IT@Contoso.com"
}
对于你的问题,不要偏离主题,但不要出于你的意图: 从安全角度来看,使用.xls密码不是安全的,它只是一种麻烦 如果您需要安全性,那么我建议您使用类似Azure信息保护的东西,它允许您加密文件,并仅与需要访问的人安全地共享文件 您仍然需要创建xls或.xlsx文件(或任何其他相关文件) 然后,您可以简单地将powershell循环到它们上面:
PS C:\>foreach ($file in (Get-ChildItem -Path \\server1\Docs -Recurse -Force |
where {!$_.PSIsContainer} |
Where-Object {$_.Extension -eq ".xls"})) {
Protect-RMSFile -File $file.PSPath -InPlace -DoNotPersistEncryptionKey All -TemplateID "e6ee2481-26b9-45e5-b34a-f744eacd53b0" -OwnerEmail "IT@Contoso.com"
}
也谢谢你的参考,这很有帮助。在这种情况下,它不必是唯一的,工作得很好。也谢谢你的参考,这很有帮助。在这种情况下,它不必是唯一的,工作得很好。谢谢你的输入,这是为其他人做的一个操作,主要是造成麻烦,但我肯定只查看Azure保护方法。感谢您的输入,这是其他人的操作,主要是造成麻烦,但我肯定会查看Azure保护方法。