Я скачал модуль powershell под названием SecurityFever.В этой библиотеке есть часть кода:
# Get the global impersonation context
$globalImpersonationContext = Get-Variable -Name 'ImpersonationContext' -Scope 'Global'
# Global variable to hold the impersonation context
if ($null -eq $globalImpersonationContext) {
$stack = New-Object -TypeName 'System.Collections.Generic.Stack[System.Security.Principal.WindowsImpersonationContext]'
New-Variable -Name 'ImpersonationContext' -Value $stack -Option ReadOnly -Scope Global -Force
}
абсолютно ясно, что это такое и что он хочет делать, но когда я выполняю это, в окне консоли появляются красные линии:
Get-Variable: Невозможно найти переменную с именем 'ImpersonationContext'.На SecurityFever.psm1: 2427 char: 35 + ... onContext = Get-Variable -Name 'ImpersonationContext' -Scope 'Global' ...
Я думаю, это потому, что get-variable
делаетне нашел эту глобальную переменную в первый раз.Мне интересно,
- , как подавить эту ошибку без изменения внешнего исходного кода lib,
- или как сделать что-то подобное - проверить, существует ли переменная.
Я пытался создать ожидаемую глобальную переменную перед вызовом функции
ImpersonationContext = New-Object -TypeName 'System.Collections.Generic.Stack[System.Security.Principal.WindowsImpersonationContext]'
или
$global:ImpersonationContext = New-Object -TypeName 'System.Collections.Generic.Stack[System.Security.Principal.WindowsImpersonationContext]'
, но каким-то образом он становится своего рода PSVariable, иВ коде написано:
Method invocation failed because [System.Management.Automation.PSVariable] does not contain a method named 'Pop'.
Я не специалист по PowerShell, и могу сказать, что совершенно не понимаю, почему.:(