2015-07-29 6 views
0

У меня есть сценарий, который, как мне кажется, больше всего подходит для того, чтобы захватить историю IE для всех пользователей на машине. Моя проблема в том, что это не работает для других пользователей, кроме меня, потому что я получаю ошибку при попытке открыть папку. У кого-нибудь есть идеи, как я могу исправить проблему с разрешениями?IE History Разрешения для других пользователей

Я запускаю этот скрипт на машине Windows 2012r2, и я являюсь администратором на этой коробке.

Спасибо!

function Get-History 
{ 
    param 
    (
     [string]$userName 
    ) 

$shell = New-Object -ComObject Shell.Application 

if($username) 
{ 
    $users = $username 
} 
else 
{ 
    $users = Get-ChildItem C:\Users 
} 

if((([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator"))) 
{ 
    Foreach($user in $users) 
    { 
     $user = Split-Path $user -leaf 
     try 
     { 
      $ErrorActionPreference = 'Stop' 
      $hist = $shell.NameSpace("C:\Users\$user\AppData\Local\Microsoft\Windows\History") 
     } 
     catch 
     { 
      continue 
     } 
     $folder = $hist.Self 
     #$folder.Path 

      if($hist){ 
      $hist.Items() | foreach { 
       #""; ""; $_.Name 
       if ($_.IsFolder) { 
        $siteFolder = $_.GetFolder 
        $siteFolder.Items() | foreach { 
         $site = $_ 
         #""; $site.Name 
         if ($site.IsFolder) { 
          $pageFolder = $site.GetFolder 
          $pageFolder.Items() | foreach { 
           $url = $pageFolder.GetDetailsOf($_,0) 
           $date = $pageFolder.GetDetailsOf($_,2) 
           #"$user`: $date visited $url" 

           #Write-Output ("$user,$date,`"$url`"" | ConvertFrom-Csv) 

           New-Object -TypeName PSObject -Property @{ 
                      user=$user; 
                      date = $date; 
                      url = $url 
                      } 
          } 
         } 
        } 
       } 
      } 
     }  

    } 
} 
else 
{ 
    Write-Host "Not Admin" 
} 
} 

Если я запускаю только небольшой фрагмент кода:

$shell = New-Object -ComObject Shell.Application    
$hist = $shell.NameSpace("C:\Users\MyOwnUsername\AppData\Local\Microsoft\Windows\History") 

Затем я успешно назначить переменную $ Hist как система .__ ComObject

Но если я бегу:

$shell = New-Object -ComObject Shell.Application    
$hist = $shell.NameSpace("C:\Users\SomeOtherUser\AppData\Local\Microsoft\Windows\History") 

Получаю:

Exception calling "NameSpace" with "1" argument(s): "Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))" 
At line:3 char:1 
+ $hist = $shell.NameSpace("C:\Users\SomeOtherUser\AppData\Local\Microsoft\Windows\History ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

Полное раскрытие: это небольшая модификация сценария на this blog post

+0

Это работает, если вы запускаете сеанс PS в качестве администратора? (Щелкните правой кнопкой мыши значок PowerShell и выберите «Запуск от имени администратора», затем запустите сценарий.) – markg

+0

Нет. Я отредактировал код, чтобы добавить проверку прав администратора, чтобы убедиться, что он тоже запущен в режиме администратора. Все еще не работает. –

ответ

0

Я никогда не решал проблемы с правами доступа. Я изменил стратегию использования BrowsingHistoryViewer от Nirsoft.

$execPath = "C:\BrowsingHistoryView.exe" 

$computers = 'computer1','computer2','computer3','computer4' 

$outPath = "c:\" 

$computers | 
    ForEach-Object{ ` 
     Start-Process $execPath ` 
      -argumentList "/HistorySource 3", 
          "/HistorySourceFolder ""\\$_\c$\Users""", 
          "/scomma ""$outpath\history_$_.txt""" 
    } 
Смежные вопросы