2015-05-09 57 views
2

如何從計算機遠程調用Openfiles.exe(位於服務器2008文件服務器上)以查看用戶打開哪些文件?我還需要讓它以參數中的域管理員用戶身份登錄。Openfiles查詢以查看打開的文件

+0

可能重複[如何通過批處理文件遠程執行命令?](http://stackoverflow.com/questions/12430049/how-to-remotely-execute-a-command-via-a-batch-文件) – Zam

回答

4

Openfiles可以直接執行服務器。您不必遠程運行它。

從幫助openfiles /query /?

OPENFILES /Query /S system /U username /P password /NH 
+0

是的,但我需要從用戶的工作站而不是服務器運行它。 – user3314399

+0

沒有人會看到輸出。那有什麼意義呢? –

+0

用戶需要查看誰偶爾在文件服務器上打開文件。 – user3314399

0

如何使用電源外殼 https://technet.microsoft.com/en-us/library/dd819505.aspx

您的PS或BAT腳本將遠程運行應用程序:

openfiles.exe > c:\temp\openfiles.txt 
當然

更好的使用不同的輸出文件夾和文件名。

替代方式: https://technet.microsoft.com/en-ca/sysinternals/bb897553.aspx - PSEXEC - PSEXEC是一個輕量級的telnet更換,讓您在執行其他系統,並配備完整的交互控制檯應用程序的過程,而無需手動安裝客戶端軟件。

+0

但我在哪裏可以指定此代碼上的遠程服務器名稱? – user3314399

0

您可以爲此使用遠程委託的powershell會話。

Use Delegated Administration and Proxy Functions

您可以委派會話配置中的運行方式設置的管理員憑據,並限制該會話只能夠運行的Openfiles.exe。然後,您可以將會話的權限分配給選定的組或用戶。這使您可以讓人們運行需要域管理員權限的cmdlet或程序,而無需爲其提供域管理員憑據。

3

做在PowerShell中,並允許搜索將與這個小功能的方式。

function Get-OpenFiles { 
    cls 
    openfiles /query /s $args[0] /fo csv /V | Out-File -Force C:\temp\openfiles.csv 
    $search = $args[1] 
    Import-CSV C:\temp\openfiles.csv | Select "Accessed By", "Open Mode", "Open File (Path\executable)" | Where-Object {$_."Open File (Path\executable)" -match $search} | format-table -auto 
    Remove-Item C:\temp\openfiles.csv 
} 

它允許你打電話給Get-OpenFiles Server Filename它會告訴你結果。需要注意的是,您有一個名爲C:\ temp的文件夾。

所以,如果我的Get-OpenFiles TestServer Hardware我得到下面。

Accessed By Open Mode Open File (Path\executable) 
----------- --------- --------------------------- 
NFDJWILL Read   N:\Network Services\Documentation\Hardware.xlsx 
NFDJWILL Write + Read N:\Network Services\Documentation\Hardware.xlsx 
NFDJWILL Read   N:\Network Services\Documentation\Hardware.xlsx 
+2

注意:您可以在不使用臨時文件的情況下將openfiles命令轉換爲ConvertFrom-CSV,然後管道選擇如下:openfiles/query/s blah/fo csv/V | ConvertFrom-Csv |選擇「打開模式」 – Preston

2

這是一個不創建臨時文件的解決方案。

function Get-OpenFile 
{ 
    Param 
    (
     [string]$ComputerName 
    ) 

    $openfiles = openfiles.exe /query /s $computerName /fo csv /V 

    $openfiles | ForEach-Object { 

     $line = $_ 

     if ($line -match '","') 
     { 
      $line 
     } 

    } | ConvertFrom-Csv 
} 

Get-OpenFile -ComputerName server1 
1

您現在可以使用PowerShell命令Get-SmbOpenFile執行此操作。