0

我目前正在编写一个脚本,该脚本可以读取工作站上的标准打印机并将其写入文本文件。现在我需要转换或剪切输出字符串并将其写入另一个文件,以便将剪切的字符串设置为新的默认打印机。

例如,第一个文本文件内容是这样的:

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

我想得到这个:

PS-myprinter

“myprinter”的字符数因打印机而异。

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

背景:我进行了从 Novell 到 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"

编辑:尝试在一台计算机上运行它。将所有输出作为对您的问题的编辑发布(不在评论中)。如果您需要隐藏一些敏感信息,只需替换单词(留下特殊字符等):

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

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

我提供的正则表达式与您的一个示例字符串完美配合,因此实际值似乎$_.Name不等于您提供的示例。所以运行上面的代码并按照我所说的提供输出,这样我们就得到了一个正确的样本。

于 2013-02-25T15:46:34.110 回答