2015-12-17 2 views
1

я пытаюсь получить свойство (владелец) файл с помощью строки коды в PowerShell:Получить файл «последний сохраненный на» собственность без изменения его

$file = "\\networkshare\directory\file.doc" 
    Get-ItemProperty -Path $file | Format-list -Property * -Force 

Это легко извлечь владелец, модифицированный дата и т.д. Но я хочу, чтобы извлечь «последний спас» и 'номер редакции':

enter image description here

Update:

Следующий код, похоже, работает. Но каждый раз, когда я запускаю скрипт, он меняет значение «last saved by». Как предотвратить это и только прочитать свойство?

$word = New-Object -Com Word.Application 
$word.Visible = $false #to prevent the document you open to show 
$doc = $word.Documents.Open("\\networkshare\directory\file.doc") 

$binding = "System.Reflection.BindingFlags" -as [type] 
Foreach($property in $doc.BuiltInDocumentProperties) { 
    try { 
     $pn = [System.__ComObject].invokemember("name",$binding::GetProperty,$null,$property,$null) 
     if ($pn -eq "Last author") { 
     $lastSaved = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$property,$null) 
     echo "Last saved by: "$lastSaved  
     }  } 
    catch { } 
} 

$doc.Close() 
$word.Quit() 
+1

У меня нет времени для правильного правильного ответа n ow (глупые встречи), но если вы google *** powershell расширили свойства файла ***, вы найдете несколько примеров использования COM-объекта Shell.Application для этого. – EBGreen

+0

@EBGreen см. Обновленный вопрос выше. Я добавил дополнительный вопрос –

+0

Пробовал ли вы объект Shell.Application COM, как я предложил? – EBGreen

ответ

3

Это происходит потому, что вы сохраняете документ, когда вы звоните $doc.Close()

Просто позвоните Close с SaveChanges к ложным:

$doc.Close($false) 

Ваш код (я также добавил, открытый в режиме только для чтения):

$word = New-Object -Com Word.Application 
$word.Visible = $false #to prevent the document you open to show 
$doc = $word.Documents.Open("\\networkshare\directory\file.doc", $false, $true) # open in read only mode 

$binding = "System.Reflection.BindingFlags" -as [type] 
Foreach($property in $doc.BuiltInDocumentProperties) { 
    try { 
     $pn = [System.__ComObject].invokemember("name",$binding::GetProperty,$null,$property,$null) 
     if ($pn -eq "Last author") { 
     $lastSaved = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$property,$null) 
     echo "Last saved by: "$lastSaved  
     }  } 
    catch { } 
} 

$doc.Close($false) 
$word.Quit() 
Смежные вопросы