如何在PowerShell的搜索结果中排除通用名称?

时间:2019-06-21 18:55:10

标签: powershell

我一直在刷新我们公司的笔记本电脑,我想到了一个有趣的问题。一位用户问:“我连接的所有Wi-Fi网络都可以转移到我的新计算机上吗?”

现在,过去我所做的就是将公司WiFi网络放在新机器上,让用户自己去寻找其他无线网络密钥。

但是由于提出了这个问题,我环顾四周,发现一个PowerShell脚本可以提取所有WiFi连接配置文件及其密码,并将其以文件形式转储到其桌面。然后,我们将复制该日志文件并将其放在新计算机的桌面上。

如果用户必须连接到具有复杂字符的网络,则非常方便。

我的问题是,我不是进行这些笔记本电脑刷新的团队中唯一的成员,而且有时我们会忘记进入日志文件并删除公司WiFi网络,因为我们不希望用户拥有该密码。

这是PowerShell脚本:

(netsh wlan show profiles) | Select-String "\:(.+)$" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name="$name" key=clear)}  | Select-String "Key Content\W+\:(.+)$" | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ PROFILE_NAME=$name;PASSWORD=$pass }} | Format-Table -AutoSize | Out-File $env:USERPROFILE\DESKTOP\Wifi.log

我试图在select-string之后添加一个where子句,但它不起作用

(netsh wlan show profiles) | Select-String "\:(.+)$" | Where {$name -notcontains "OUR CORP SSID"}| %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name="$name" key=clear)}  | Select-String "Key Content\W+\:(.+)$" | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ PROFILE_NAME=$name;PASSWORD=$pass }} | Format-Table -AutoSize | Out-File $env:USERPROFILE\DESKTOP\Wifi.log
(netsh wlan show profiles) | Select-String "\:(.+)$" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name="$name" key=clear)}  | Select-String "Key Content\W+\:(.+)$" | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ PROFILE_NAME=$name;PASSWORD=$pass }} | Format-Table -AutoSize | Out-File $env:USERPROFILE\DESKTOP\Wifi.log

预期结果:显示除公司SSID之外的所有SSID

实际结果:它仍然显示在列表中。

1 个答案:

答案 0 :(得分:0)

我在理解您要执行的操作时遇到了麻烦,但是我相信从根本上讲您正在尝试确保无论如何都删除敏感文件。在这种情况下,您应该应用try / finally模式。我还建议不要将文件放在用户可以看到的位置,而应将其放在其临时文件夹中。

$ErrorActionPreference = "Stop"
$path = "$env:TEMP\..." # path to the temporary sensitive file
try {
    # in here, create the sensitive file
} finally {
    Remove-Item $path -Force
}