2012-04-30 49 views
1

我有一個將項目發送到回收站(如果選中)或永久刪除項目的腳本。如果腳本在本地運行,則回收件可正常運行。確定從腳本執行的位置

但是,如果它是從不同的計算機上運行 - 在這種情況下,我的本地機器上運行對服務器上的共享文件夾中的腳本 - 刪除是永久,並不會發送到回收站。該腳本(在之前的運行),使(以後看到它是多少備份保留)未設置存檔位的項目是一個關於什麼決定先存檔位設置爲TRUE,然後刪除刪除該腳本的下一次執行。

我的想法是修改主腳本以標記要刪除的文件,但只有在腳本在本地運行時刪除文件的物理操作,或者僅將回收腳本(本身)作爲將要刪除的服務器上的任務&將該項目發送到將以設定間隔運行的回收站。

我的問題 -

  1. 在PowerShell中(用2.0)你怎麼確定源計算機 VS目標計算機?在這種情況下,腳本從 MyPC運行,它的目標是Server1。
  2. 無論目標是映射驅動器(驅動器Y :), 還是目標服務器名稱(\ Server1),腳本都會運行。 如何在這兩種情況下區分上述問題?

回答

1
  1. 您可以獲取本地計算機名稱以$ ENV:計算機名。用它來比較值與目標服務器名稱。

  2. 對於每個文件,您必須首先檢查驅動器是否爲映射驅動器,如果是,則從wmi實例獲取服務器名稱並將其與$ env:COMPUTERNAME進行比較。

你可以得到一個文件的驅動器預選賽與Split-Path的cmdlet:

PS> $drive = Split-Path Q:\test.txt -Qualifier 
PS> $drive 
Q: 

,然後得到與WMI服務器名稱:

PS> (gwmi win32_logicaldisk -filter "drivetype=4 and deviceid='$drive'").ProviderName.Split('\')[2]  
Server1 
+0

謝謝。由於(在我的情況下)服務器名稱也可能包含文件或文件夾路徑作爲它的一部分,您如何確定\\ Server1 \ filepath1 \ filepath2 \ test.txt的服務器部分?上述工作正常,如果它被映射。 –

+0

你可以使用字符串解析或正則表達式。這裏有一個不涉及這兩種方法的方法:([System.Uri]「\\ Server1 \ filepath1 \ filepath2 \ test.txt」)主機 –

+0

我upvoted一個整潔的一段代碼,但我想知道如何編程確定如果驅動器是映射驅動器?經驗上,它看起來像'(gwmi win32_logicaldisk -filter「drivetype = 4和deviceid ='C:'」)-eq $ null'會起作用,但有沒有更簡單的方法? –

0

的OP寫道:

@Shay - 感謝您的幫助。我在各種Powershell網站上了解了很多來自您的帖子。

我能夠使用幾乎你所說的一切,只需要添加一個額外的代碼行,使其工作。我檢查了屬性([System.Uri]$markedFile).IsUnc以確定我讀取的文件名是否是UNC名稱。

如果驅動器映射,真實的,如果它是UNC返回FALSE。從這一點,我能夠獲得服務器名&做一個比較的環境。代碼如下。

$markedFile = "\\Server1\foldername1\Error.log" 
#$markedFile = "Y:\foldername1\Error.log" 

$TargetComputer = $null 
$thisComputer = Get-Content env:computername 
if (Test-Path $markedFile) { # if file exists 
    if (([System.Uri]$markedFile).IsUnc) { # if it's a UNC name & not a mapped drive name 
     $TargetComputer = ([System.Uri]$markedFile).Host 
     } 
    else { #file is not a UNC name, it must be a mapped drive 
     $drive = Split-Path $markedFile -Qualifier 
     $TargetComputer = (gwmi win32_logicaldisk -Filter "drivetype=4 and deviceid = '$drive'").Providername.split('\')[2] 
    } 
} 

上述代碼以任一方式工作。再次感謝你的幫助!

+0

([在問題中回答編輯並轉換爲社區wiki](http://meta.stackoverflow.com/questions/267434/what-is-the-woole-action-when-the-answer-to-a-問題 - 被添加到所述闕))。 –