2013-02-25 62 views
0

我目前正在研究一個腳本,該腳本讀出工作站上的標準打印機並將其寫入文本文件。現在我需要轉換或剪切輸出字符串並將其寫入另一個文件,以便將切割的字符串設置爲新的默認打印機。從文本文件中選擇字符串的一部分,並使用powershell將其寫入另一個

例如第一個文本文件的內容是這樣的:

\ NDPS-MYDOMAIN \ myprinter.ou.cn.mydomain.de

我希望得到這樣的:

PS- myprinter

「myprinter」的字符數量因打印機而異。

我被困在切割完整的字符串中需要的部分。

背景:我做了一個從novell到microsoft的大型打印服務器遷移。爲了儘可能減少對用戶的影響,我希望將此腳本作爲默認打印機再次設置爲新的Microsoft部署打印機。希望這是可以理解的。

對不起,我的英語不好。

預先感謝

示例代碼到目前爲止:

$name = (get-content env:Computername) 

Get-WmiObject -Class Win32_Printer -Filter "Default = $true" | 
    Select-Object - expandProperty Name | 
    Out-File -filepath C:\"$name"_defaultprinter.txt 

Get-Content "C:\"$name"_defaultprinter.txt" | 
    Foreach-Object {$_.Replace("NDPS","PS")} | 
    Set-Content "C:\"$name"_defaultprinter.txt" 

這裏是輸出:

\\mydomain\NDPS-MJP1-0014-SamsungML3471.A-Printers.MJP1.xx-xxxx.xxxxx-xxxxx.DE \\mydomain\NDPS-MJP1-0014-SamsungML3471.A-Printers.MJP1.xx-xxxx.xxxxx-xxxxx.DE

輸出應該只有PS-MJP1-0014-SamsungML3471

+0

感謝您的編輯 – 2013-02-25 15:46:05

回答

0

試試這個腳本:

Get-WmiObject -Class Win32_Printer -Filter "Default = $true" | % { 
    $_.Name -replace '(?:.*)\\NDPS-([^\.]+)(?:.*)', 'PS-$1' 
} | Out-File -FilePath "C:\$($env:COMPUTERNAME)_defaultprinter.txt" 

編輯:嘗試在一臺計算機上運行此。將所有輸出作爲編輯發佈到您的問題中(不在評論中)。如果你需要隱藏一些敏感信息,只需更換的話(保留特殊字符等):

Get-WmiObject -Class Win32_Printer -Filter "Default = $true" | % { 
    $_.Name 

    $_.Name -replace '(?:.*)\\NDPS-(?:[^\\]+)\\(.+?)\.(?:.*)', 'PS-$1' 
} 

正則表達式我提供了完美的作品與你samplestrings之一,這樣看來的$_.Name實際值不等於您提供的樣本。因此,運行上面的代碼並按照我所說的提供輸出,以便我們得到正確的樣本。

+0

感謝您的快速回答。我會在星期四嘗試這個,因爲我現在正在度假。我將在星期四的測試後直接發佈結果。 – 2013-02-25 15:57:03

+0

你好再次,昨天我無法測試。但是,今天我做了,替換不起作用。 out-file包含以下字符串:\\ mydomain \ NDPS-myprinter.ou.cn.mydomain.de這與存儲在系統中的格式相同。但是,out-file應該看起來像這樣:僅限PS-myprinter。我的首席職位有點不對。對不起。 – 2013-03-01 09:56:06

+0

它只是當我試圖將您的示例作爲普通字符串來做。 。嘗試$ test = $ _。foreachloop中的名稱(%{... Here ....})。然後在循環之後。使用和不使用replace-command輸出變量。將編輯中的所有輸出提供給您的問題。 – 2013-03-01 11:35:20

相關問題