#powershell
Вопрос:
вот мой код до сих пор. В основном он использует URL-адрес события календаря Google и пытается извлечь идентификатор события из того, что ему задано, а затем выполнить команду.
function ParseGoogleEvent {
param (
[parameter(Mandatory = $true,
HelpMessage = "Enter entire url of event or event ID"
)][string]$EventURL,
[parameter(Mandatory = $False,
HelpMessage = "Enter to forum full GAM Command"
)][string]$Email,
[parameter(Mandatory = $False,
HelpMessage = "Will run the GAM command with -Email"
)][switch]$Run
)
Try {
[uri]$TestURI = $EventURL
$TestURI = $TestURI.segments[6]
}
Catch {
$TestURI = $TestURI.OriginalString
}
function Get-PaddingRequired {
param (
[Parameter(Mandatory = $true)]
[String]$InputString
)
$modulo = ($InputString.Length % 3)
switch ($modulo) {
0 { $paddingRequired = $null }
1 { $paddingRequired = '==' }
2 { $paddingRequired = '=' }
}
Return [string]$paddingRequired
}
$Padding = Get-PaddingRequired -InputString $TestURI
$TestURI = "$TestURI $Padding"
Try {
$Result = [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String($TestURI))
}
Catch {
Write-Warning "Problem with input of $EventURL.`nTry entire url."
Return $null
}
$Result = $Result.split(" ")[0]
IF ([string]::IsNullOrWhiteSpace($Email)) {
Write-Warning "GAM calendar <Email> info event id $Result"
}
Else {
Write-Warning "GAM calendar $Email info event id $Result"
If ($Run) {
$File = $Email 'Event.txt'
GAM calendar $Email info event id $Result > $File
Write-Host $File
}
}
Return [string]$Result
}
Проблема с моим кодом в том, что он не учитывает различные способы ввода строки.
Мой код может в настоящее время обрабатывать 2 из 3 was.
Не могу справиться. (Следующее взято из диагностики календаря Google)
Event{eid=69uqr7fedmm5elmtout52hu0or_20211006T160000Z, <Blah blah}
Потому что по большей части он уже разобран
Мой код справится.
https://calendar.google.com/calendar/u/0/r/eventedit/Njl1cXI3ZmVkbW01ZWxtdG91dDUyaHUwb3JfMjAyMTEwMDhUMTYwMDAwWiBkYW4uY2FzbWFzQHNvbm9zLmNvbQ
and
Njl1cXI3ZmVkbW01ZWxtdG91dDUyaHUwb3JfMjAyMTEwMDhUMTYwMDAwWiBkYW4uY2FzbWFzQHNvbm9zLmNvbQ
Есть хорошие идеи о том, как найти идентификатор события для всех 3 примеров ?
Ответ №1:
Вы можете использовать -match
оператор для проверки того, находится ли входная строка в формате, отличном от base64, как это:
# $EventURL = 'Event{eid=69uqr7fedmm5elmtout52hu0or_20211006T160000Z, <Blah blah}'
if ($EventURL -match 'Event{.*?beid=(w ).*?}') {
# The Event{...} format was passed, grab the eid value from the capture group above
$Result = $Matches[1]
}
else {
# your existing code parsing the URL/base64 format goes here
}
if ([string]::IsNullOrWhiteSpace($Email)) {
Write-Warning "GAM calendar <Email> info event id $Result"
}
else {
Write-Warning "GAM calendar $Email info event id $Result"
if ($Run) {
$File = $Email 'Event.txt'
GAM calendar $Email info event id $Result > $File
Write-Host $File
}
}
return [string]$Result
Комментарии:
1. Как мне научиться создавать шаблоны соответствия ?
if ($EventURL -match 'Event{.*?beid=(w ).*?}')
2. @dcaz, изучи регулярное выражение