Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell循环以写入受密码保护的文件_Powershell_Loops - Fatal编程技术网

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

我正在尝试将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.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保护方法。