0

私は現在、ワークステーションの標準プリンターを読み取り、それをテキストファイルに書き込むスクリプトに取り組んでいます。ここで、出力文字列を変換または切り取り、別のファイルに書き込んで、切り取った文字列を新しいデフォルト プリンターとして設定する必要があります。

たとえば、最初のテキストファイルの内容は次のようになります。

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

私はこれを取得したい:

PS-myprinter

「myprinter」の文字数はプリンターごとに異なります。

完全な文字列から必要な部分を切り取るのに苦労しています。

背景:私はノベルからマイクロソフトへのプリントサーバーの大規模な移行を行いました。ユーザーへの影響を最小限に抑えるために、このスクリプトを使用して新しい 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

4

1 に答える 1

0

代わりに次のスクリプトを試してください。

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

編集:これを1台のコンピューターで実行してみてください。あなたの質問への編集としてすべての出力を投稿してください(コメントではありません)。機密情報を隠す必要がある場合は、単語を置き換えてください (特殊文字などを残します):

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

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

私が提供した正規表現は、あなたのサンプル文字列の 1 つで完璧に機能するため、実際の値は$_.Nameあなたが提供したサンプルと等しくないようです。上記のコードを実行し、前述のように出力を提供して、正しいサンプルを取得します。

于 2013-02-25T15:46:34.110 に答える