Nasıl olabilir Documents.OpenNoRepairDialog
yöntem, en azından sağlanan tüm parametrelerle, Word belgelerinin hatasız, diyaloglar veya makrolar olmadan açıldığı noktaya kadar powershell tarafından çağrılır; ve şifre korumalı olan belgeler, bir kullanıcının çıkarması gereken hiçbir açılır pencere / diyalog olmadan başarısız olur?
Bir belgeyi powershell aracılığıyla Microsoft Office Word 2013 ile açmaya çalışmak,
Documents.Open
yöntem. Makro içeren veya parola koruması içeren dosyaları açmaya çalışmak, bir kişinin manuel olarak kapatması gereken bir hata veya iletişim kutusuyla sonuçlanır. Bu işlem yüzbinlerce dosya üzerinden geçer, bu yüzden gecikmeler zaman engelleyicidir. Kullanmaya çalıştım Documents.OpenNoRepairDialog
Bu iletişim kutularını atlamak ve salt okunur ve muhtemelen bozuk dosyaları açmak için yöntem. Aşağıda bir dosyayı açmak için kullandığım kodun bir örneği verilmiştir.
# Enable Office core libraries
Add-type -AssemblyName office
# Doc open parameter array
$DOCOpen = @{}
$DOCOpen.FileName=[string]"<Full Path to File>"
$DOCOpen.ConfirmConversions=[Microsoft.Office.Core.MsoTriState]::msoFalse
$DOCOpen.ReadOnly=[Microsoft.Office.Core.MsoTriState]::msoTrue
$DOCOpen.AddToRecentFiles=[Microsoft.Office.Core.MsoTriState]::msoFalse
$DOCOpen.PasswordDocument=$Null
$DOCOpen.PasswordTemplate=$Null
$DOCOpen.Revert=[Microsoft.Office.Core.MsoTriState]::msoTrue
$DOCOpen.WritePasswordDocument=$Null
$DOCOpen.WritePasswordTemplate=$Null
$DOCOpen.Format=[Microsoft.Office.Interop.Word.WdOpenFormat]::wdOpenFormatAuto
$DOCOpen.Encoding=[Microsoft.Office.Core.MsoEncoding]::msoEncodingOEMUnitedStates
$DOCOpen.Visible=[Microsoft.Office.Core.MsoTriState]::msoFalse
$DOCOpen.OpenAndRepair=[Microsoft.Office.Core.MsoTriState]::msoFalse
$DOCOpen.DocumentDirection=[Microsoft.Office.Interop.Word.WdDocumentDirection]::wdLeftToRight
$DOCOpen.NoEncodingDialog=[Microsoft.Office.Core.MsoTriState]::msoTrue
$DOCOpen.XMLTransform=$Null
$DOCOpen.OpenConflictDocument=[Microsoft.Office.Core.MsoTriState]::msoFalse
# Create MS Office object
$appWord = New-Object -ComObject Word.Application
# Set application objecs not visible
$appWord.visible = $False
# Supress alerts or dialogs
$appWord.DisplayAlerts = "wdAlertsNone" # $wdAlertsNone #
# Supress document macros
$appWord.AutomationSecurity = "msoAutomationSecurityForceDisable"
# Word specific settings
$appWord.ScreenUpdating = $False
$appWord.DisplayRecentFiles = $False
$appWord.DisplayScrollBars = $False
$DOCDocument = $appWord.Documents.OpenNoRepairDialog($DOCOpen.FileName, $DOCOpen.ConfirmConversions, $DOCOpen.ReadOnly, $DOCOpen.AddToRecentFiles, $DOCOpen.PasswordDocument, $DOCOpen.PasswordTemplate, $DOCOpen.Revert, $DOCOpen.WritePasswordDocument, $DOCOpen.WritePasswordTemplate, $DOCOpen.Format, $DOCOpen.Encoding, $DOCOpen.Visible, $DOCOpen.OpenAndRepair, $DOCOpen.DocumentDirection, $DOCOpen.NoEncodingDialog, $DOCOpen.XMLTransform)
Bu sürecin sonucu aşağıdakine benzer:
Object reference not set to an instance of an object.
At <Full path to file>\temp_Test_PowerShell_Code.ps1:41 char:3
+ $DOCDocument = $appWord.Documents.OpenNoRepairDialog($FileRec.FileN ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], NullReferenceException
+ FullyQualifiedErrorId : System.NullReferenceException
Ben de kullanmaya çalıştım documents.open
yöntem:
$DOCDocument = $appWord.Documents.Open($FileRec.FileName, $DOCOpen.ConfirmConversions, $DOCOpen.ReadOnly, $DOCOpen.AddToRecentFiles, $DOCOpen.PasswordDocument, $DOCOpen.PasswordTemplate, $DOCOpen.Revert, $DOCOpen.WritePasswordDocument, $DOCOpen.WritePasswordTemplate, $DOCOpen.Format, $DOCOpen.Encoding, $DOCOpen.Visible, $DOCOpen.OpenConflictDocument, $DOCOpen.OpenAndRepair, $DOCOpen.DocumentDirection, $DOCOpen.NoEncodingDialog)
Bu durumda aşağıdaki sonucu alıyorum:
Exception setting "Open": Cannot convert the "msoTrue" value of type "MsoTriState" to type "Object".
At <Full path to file>\temp_Test_PowerShell_Code.ps1:41 char:3
+ $DOCDocument = $appWord.Documents.Open($FileRec.FileName, $DOCOpen. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : RuntimeException
İçin bir Visual Basic referansına göre opennorepairdialog ve bir .NET başvurusu Documents.OpenNoRepairDialog metodun parametreleri, powershell'in beklenen formatta üretim yapmakta zorlandığı görünen sistem nesneleridir.