Powershell忽略“只读”请求并打开而不只读

我有一个文档设置为要求用户打开一个只读版本(选项“只读build议”)。 我想打开excel文件,而不用只读在powershell(拒绝提示要求打开“只读”)。 这是我目前的代码。

$dir = "\\file_path\*" $latest = Get-ChildItem -Path $dir | Sort-Object LastAccessTime -Descending | Select-Object -First 1 $latest.name $excelObj = New-Object -ComObject Excel.Application $excelObj.Visible = $True $excelObj.DisplayAlerts = $False $workBook = $excelObj.Workbooks.Open($latest) 

如何忽略只读提示并打开完整版本?

应该有一个IgnoreReadOnlyRecommended参数,您可以在工作簿打开方法中提供:

 $workBook = $excelObj.Workbooks.Open($latest,,,,,,$True,,,,,,,) 

工作簿。打开方法(MSDN)


编辑

根据下面的注释,看起来有一个错误,当提供$null参数时,这个方法无法工作。 感谢在另一个问题上的这个答案 ,似乎有可能是一个解决方法:

第一,这个function是必需的:

 Function Invoke-NamedParameter { [CmdletBinding(DefaultParameterSetName = "Named")] param( [Parameter(ParameterSetName = "Named", Position = 0, Mandatory = $true)] [Parameter(ParameterSetName = "Positional", Position = 0, Mandatory = $true)] [ValidateNotNull()] [System.Object]$Object , [Parameter(ParameterSetName = "Named", Position = 1, Mandatory = $true)] [Parameter(ParameterSetName = "Positional", Position = 1, Mandatory = $true)] [ValidateNotNullOrEmpty()] [String]$Method , [Parameter(ParameterSetName = "Named", Position = 2, Mandatory = $true)] [ValidateNotNull()] [Hashtable]$Parameter , [Parameter(ParameterSetName = "Positional")] [Object[]]$Argument ) end { ## Just being explicit that this does not support pipelines if ($PSCmdlet.ParameterSetName -eq "Named") { ## Invoke method with parameter names ## Note: It is ok to use a hashtable here because the keys (parameter names) and values (args) ## will be output in the same order. We don't need to worry about the order so long as ## all parameters have names $Object.GetType().InvokeMember($Method, [System.Reflection.BindingFlags]::InvokeMethod, $null, ## Binder $Object, ## Target ([Object[]]($Parameter.Values)), ## Args $null, ## Modifiers $null, ## Culture ([String[]]($Parameter.Keys)) ## NamedParameters ) } else { ## Invoke method without parameter names $Object.GetType().InvokeMember($Method, [System.Reflection.BindingFlags]::InvokeMethod, $null, ## Binder $Object, ## Target $Argument, ## Args $null, ## Modifiers $null, ## Culture $null ## NamedParameters ) } } } 

这将build议Workbooks.Open()方法可以这样调用:

 $workBook = Invoke-NamedParameter $excelObj "Workbooks.Open" @{"FileName"=$latest;"IgnoreReadOnlyRecommended"=$True} 

如果你只是打开文件阅读,并忽略提示,那么这个工程:

 $workBook = $excelObj.Workbooks.Open($latest,$null,$true) 

第三个参数表示为真,以打开只读。 这种方法似乎并没有受到上述的错误!