Powershell игнорирует ошибки или предупреждения - PullRequest
0 голосов
/ 17 мая 2018

Я скачал модуль 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, и могу сказать, что совершенно не понимаю, почему.:(

1 Ответ

0 голосов
/ 17 мая 2018

С здесь , вы можете использовать Test-Path со специальным синтаксисом для проверки вашей переменной. Вы можете сделать что-то вроде этого -

if (Test-Path variable:global:ImpersonationContext)
{
    write-host "The variable ImpersonationContext exists in the global scope"
}
else
{
    $stack = New-Object -TypeName 'System.Collections.Generic.Stack[System.Security.Principal.WindowsImpersonationContext]'
    New-Variable -Name 'ImpersonationContext' -Value $stack -Option ReadOnly -Scope Global -Force
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...