PowerShell «В запросе присутствует неожиданный символ».

#powershell

#powershell

Вопрос:

У меня есть небольшой скрипт PS ISE, который подключается к серверу Exchange, выполняет поиск и удаляет электронные письма на основе темы и экспортирует результаты в Excel. Проблема возникает, когда я пытаюсь передать * как часть строки темы во всплывающем окне.

Например, если я хочу удалить все электронные письма с темой, содержащей * МЕЛАТОНИН*, это не удастся. Однако, если я введу всю строку темы без*, это сработает. Но я намерен использовать подстановочный знак.

Я понимаю, что он считает * недействительным. Вопрос в том, как я могу использовать его и предотвращать ошибки? Любая помощь будет оценена по достоинству.

 cls #checks for files existance and deletes them if found $FileName = "C:usersUserNamedesktopabc.csv" If (Test-path $FileName) {  Remove-Item $FileName }  $FileName = "C:usersUserNamedesktopabc2.csv" If (Test-path $FileName) {  Remove-Item $FileName }  #popup window to type email subject line to be deleted Add-Type -AssemblyName Microsoft.VisualBasic $title = 'Subject Line' $msg = 'Enter subject line to search for:' $text = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)  #passing credentials thru script $pw = convertto-securestring -AsPlainText -Force -String "Password"" $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "domainUserName",$pw  #connecting to Exchange server  Set-ExecutionPolicy RemoteSigned $ExSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://EmailServer/PowerShell/' -Authentication Kerberos Import-PSSession ($ExSession) -AllowClobber  #running email search. HERE IS WHERE I GET THE ERROR IF I USE *subject* Get-Mailbox -ResultSize unlimited |  Search-mailbox -SearchQuery ([scriptblock]::create("Subject:'$text'")) -DeleteContent -force |  Export-Csv c:usersUserNamedesktopabc.csv -NoTypeInformation  start-sleep -s 2 #importing results and sorting parsing columns Import-Csv -Path "C:UsersUserNameDesktopabc.csv" |  Select $Headers |   Select Identity, ResultItemsCount, ResultItemsSize |  Sort ResultItemsCount -Descending |  Export-Csv -Path "C:UsersUserNameDesktopabc2.csv" -Force -NoTypeInformation  start-sleep -s 2 start "C:UsersUserNameDesktopabc2.csv"  Remove-PSSession $ExSession  

Комментарии:

1. Пробовали заменить поле ввода vb и попытались выполнить прямое частичное совпадение строк в вашем скрипте? например $text = Read-host "enter the string"

2. Я предпочитаю такой цикл «да/нет», как этот $YesNoResponse = $null while ($YesNoResponse -ne "y" -and $YesNoResponse -ne "n") { Clear-Host write-host "Hit enter to break script. " -ForegroundColor Magenta -NoNewline Write-Host "Run Something ?" -ForegroundColor Yellow $YesNoResponse = Read-Host " [Y/N] " If ($YesNoResponse -eq "") { Return Write-Host "Enter was inputted" -ForegroundColor Black -BackgroundColor White } }

3. может быть, попробуйте $text.trim() Или перед вашей ошибкой, остановитесь и проверьте свои переменные. Я предполагаю, что это сработает, если вы принудительно введете переменную?

4. Вы пробовали -SearchQuery "subject:*$text*" ?

5. Командлет Search-Mailbox устарел в пользу командлетов New-ComplianceSearch и связанных с ними командлетов обнаружения электронных данных.