多くのExcelドキュメントを変換しパスワードで保護するために使用しているスクリプトがあります。古い文書はExcel 2003形式であり、変換/パスワードによる保護が可能です。より最近の文書を見ると、ファイルはExcel 2010形式であるため、パスワードで保護する必要があります。私はxlsxファイルが既にパスワードで保護されているかどうかをチェックする方法を見つけようとしているので、スキップすることができます(すでに処理されている2003ファイルになる可能性があります)。パスワードがあるファイルを開くと、visibleプロパティがfalseに設定されているにもかかわらず、excelがポップアップしてそのパスワードを要求してから続行します。チェックを自動化する方法が必要です。これは、多くの文書が通過するためです。これは私が今まで持っているコードです:Excelパスワード保護のPowershellテスト
[cmdletbinding()]
param (
[parameter(mandatory=$true)][string]$Path,
[parameter(mandatory=$false)][switch]$Visible,
[parameter(mandatory=$false)][string]$ToFolder,
[parameter(mandatory=$false)][string]$Password,
[parameter(mandatory=$false)][switch]$Force
)
begin {
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault
Write-Verbose 'Opening Excel COM object.'
$Excel = New-Object -ComObject excel.application
if ($Visible -eq $true) {
$Excel.visible = $true
} else {
$Excel.visible = $false
$Excel.DisplayAlerts = $false
$Excel.ScreenUpdating = $false
$Excel.UserControl = $false
$Excel.Interactive = $false
}
$filetype = "*xls"
} process {
if (Test-Path -Path $Path) {
Get-ChildItem -Path $Path -Include '*.xls' -recurse | ForEach-Object {
Write-Verbose "Processing $($_.Basename)"
if ($ToFolder -ne '') {
$FilePath = Join-Path $ToFolder $_.BaseName
$FilePath += ".xlsx"
} else {
$FilePath = ($_.fullname).substring(0, ($_.FullName).lastindexOf("."))
$FilePath += ".xlsx"
}
if (!(Test-Path $FilePath) -Or $Force) {
Write-Verbose "Opening $($_.Basename)"
$WorkBook = $Excel.workbooks.open($_.fullname)
Write-Verbose "Saving $($_.Basename) to $FilePath with password $Password"
$WorkBook.saveas($FilePath, $xlFixedFormat, $Password)
Write-Verbose "Closing $($_.Basename)"
$WorkBook.close()
} else {
Write-Verbose "$($_.Basename) already converted."
}
}
} else {
return 'No path provided or access has been denied.'
}
} end {
Write-Verbose 'Closing Excel'
$Excel.Quit()
$Excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
}
それは停止し、パスワードを要求 '$ Excel.workbooks.open'呼び出しですか? –
@JoachimIsaksson:はい、ここが止まります。 – Caynadian
ここでアイデアを捨ててください。ダミーのパスワードを 'open'に渡すとどうなりますか?それでもプロンプトが出るか、例外がスローされますか? –