Как исключить общее имя из результата поиска в PowerShell? - PullRequest
1 голос
/ 21 июня 2019

Я обновлял ноутбуки наших компаний, и у меня возник интересный вопрос. Пользователь спросил: «Все ли мои сети Wi-Fi, которые я подключил, перейдут на мою новую машину?»

Теперь в прошлом все, что я делал, это помещал наши корпоративные сети Wi-Fi на новую машину и позволял пользователю самостоятельно искать другие ключи беспроводной сети.

Но так как этот вопрос был задан мне, я осмотрелся и нашел скрипт PowerShell, который извлекает все профили подключения WiFi и их пароли, и он выгружает их из файла на рабочий стол. Затем мы скопируем этот файл журнала и поместим его на рабочий стол их новой машины.

Очень удобно, если пользователь должен подключаться к сети со сложными символами.

Моя проблема в том, что я не единственный член команды, выполняющий эти обновления для ноутбуков, и были времена, когда мы забывали заходить в файл журнала и удалять корпоративную сеть Wi-Fi, поскольку мы не хотим, чтобы пользователи имели этот пароль.

Вот скрипт 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

Я пытался добавить предложение where после select-string |, но оно не работает

(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 голосов
/ 21 июня 2019

У меня проблемы с пониманием того, что вы пытаетесь сделать, но я считаю, что в корне вы пытаетесь гарантировать, что ваш конфиденциальный файл будет удален, несмотря ни на что.В этом случае вы должны применить шаблон 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...