在选择要使用$array替换的对象时使用-replace



我需要一些帮助。我正在尝试让一个脚本工作,它使用一个文本文件,其中充满了需要从命令管道中筛选的单词。

这是我创建的$filters文本文件(注意-值为服务器卷名):

('75ab4a4776bc11e09ae1806e6f6e6963',')('296b67b2c1f111e298d6806e6f6e6963','')('3636932b95111e2a4be806e6f6e6963','')('296b67b2c1f111e298d6806e6f6e6963','')('3f149289a83911e380b3806e6f6e6963','')('61aee3ccd72911e4ad8e806e6f6e6963','')('97c80f3d9b7911e2b24e806e6f6e6963','')('3f149289a83911e380b3806e6f6e6963','')('181BCC0400D34ED0BC61CB7B1AC1FB9E','')('52120b028f8011dfb1bd806e6f6e6963','')('fff9b1f76a911e09259806e6f6e6963','')('d4843b91172311e4ba95806e6f6e6963','')('668b283173711e4bfdb806e6f6e6963','')('d68e8a9cc5d211e680b4806e6f6e6963','')('d68e8a9cc5d211e680b4806e6f6e6963','')('3f149289a83911e380b3806e6f6e6963','')

我想做的是将文本文件中的所有值解析为以下命令:

Get-BEAgentServer | Where-Object {
($_.BackupStatus -eq "BackupSucceeded")
} | Where-Object {
($_.BackupStatus -ne "unknown")
}

如果我加上这个,我会得到我想要的过滤输出:

Select-Object @{n='Server Name';e={
$_.Name -replace ('3f149289a83911e380b3806e6f6e6963','') `
-replace ('61aee3ccd72911e4ad8e806e6f6e6963','') `
-replace  ('97c80f3d9b7911e2b24e806e6f6e6963','') `
-replace ('3f149289a83911e380b3806e6f6e6963','') `
-replace ('181BCC0400D34ED0BC61CB7B1AC1FB9E','') `
-replace ('52120b028f8011dfb1bd806e6f6e6963','') `
-replace ('dfff9b1f76a911e09259806e6f6e6963','') `
-replace ('d4843b91172311e4ba95806e6f6e6963','') `
-replace ('668b283173711e4bfdb806e6f6e6963','') `
-replace ('d68e8a9cc5d211e680b4806e6f6e6963','') `
-replace ('d68e8a9cc5d211e680b4806e6f6e6963','') `
-replace ('3f149289a83911e380b3806e6f6e6963','') `
-replace ('Volume', 'SysVol') `
-replace ('7ECA562AF49C475EB10168CF5C0D302C','') `
-replace ('e3636932b95111e2a4be806e6f6e6963','') `
-replace ('296b67b2c1f111e298d6806e6f6e6963','') `
-replace ('75ab4a4776bc11e09ae1806e6f6e6963','')
}}, starttime, setendtime | Sort-Object "Server Name" -Unique | select -Skip 1

我的问题是,是否可以简单地使用$filters替换命令,而不是手动将每个字符串添加到筛选器?这将使我在将来更容易添加筛选字符串。

只将您想要删除的字符串放入输入文件:

75ab4a4776bc11e09ae1806e6f6e6963296b67b2c1f111e298d6806e6f6e6963e3636932b95111e2a4be806e6f6e6963296b67b2c1f111e298d6806e6f6e69633f149289a83911e380b3806e6f6e696361aee3ccd72911e4ad8e806e6f6e696397c80f3d9b7911e2b24e806e6f6e69633f149289a83911e380b3806e6f6e6963181bcc0400d34ed0bc61cb7b1c1fb9e52120b028f8011dfb1bd806e6f6e6963dfff9b1f76a911e09259806e6f6e6963d4843b91172311e4ba95806e6f6e6963668b283173711e4bfdb806e6f6e6963d68e8a9cc5d211e680b4806e6f6e6963d68e8a9cc5d211e680b4806e6f6e69633f149289a83911e380b3806e6f6e6963

读取文件并从中构建一个正则表达式:

$filter = (Get-Content 'C:pathtofilters.txt' | ForEach-Object {
[regex]::Escape($_)
}) -join '|'

然后用一个替代品删除内容:

Select-Object @{n='Server Name';e={$_.Name -replace $filter}}, ...

最新更新