it-source

powershell 아직 할당되지 않은 변수 테스트

criticalcode 2023. 8. 24. 22:12
반응형

powershell 아직 할당되지 않은 변수 테스트

변수에 변수가 할당되었는지 여부와 작업을 수행하지 않았는지 여부를 검정하려고 합니다.어떻게 이것을 달성할 수 있습니까?

다음 코드로 시도했지만 오류가 발생합니다.'-is'의 오른쪽 피연산자는 형식이어야 합니다.

$ProgramName은 현재 할당되지 않았습니다.

If ($ProgramName -isnot $null) {
    $ProgramName = $ProgramName + ', ' + $cncPrograms
}
Else {
    If ($cncPrograms -isnot $null) {
    $ProgramName = $cncPrograms 
    }
}

할당되지 않은 변수의 값은 null이지 데이터 유형이 아닙니다.이렇게 하면 됩니다.

If ($ProgramName -ne $null)

...돌아올 것입니다.TRUE값이 할당되지 않은 경우.

훨씬 더 쉽게 확인할 수 있는 것은

IF($ProgramName)

그게 맞는지 확인할 것입니다.$null아니면, 논리는 반대지만, 그래서 당신은 사용할 수 있습니다.

IF(!$ProgramName)

편집:

Ruffin은 댓글에서 엄격한 모드에 대한 좋은 점을 제기합니다.이 방법은 다음과 같이 사용할 수 있습니다.

Test-Path variable:ProgramName또는Test-Path variable:global:ProgramName예를 들어, 명시적으로 글로벌 범위인 경우.반환됩니다.$true또는$false변수가 존재하는지 여부에 따라 달라집니다.

Test-Path variable:\var당신이 원하는 것을 해야 한다고 생각합니다.

위의 답변과는 반대로

Test-Path variable:ProgramName  

변수의 존재만 테스트하기 때문에 찾고 있는 것이 아닐 수 있습니다.변수가 $null로 설정된 경우에도 $true를 반환합니다.

따라서 엄격한 모드에서 해당 항목의 존재 여부와 비어 있지 않은지 여부를 테스트해야 할 수도 있습니다.

Set-StrictMode -version Latest
#TODO Add a scope parameter
Function IsEmpty([string]$varname){
   if (Test-path "variable:$varname"){ 
      $val=(gi "variable:$varname").value
      if ($val -is [bool]) {$false}
      else {$val -eq '' -or $val -eq $null} }
   else{ $true }
}

#TEST:
if (test-path variable:foobar){remove-variable foobar} ; IsEmpty foobar
$foobar=$null; IsEmpty foobar
$foobar='';  IsEmpty foobar;
$foobar=$false;  IsEmpty foobar

#Results:
True
True
True
False

엄격한 모드는 스크립팅의 재미를 덜어줍니다.

-가 유형용이 아니라는 사실 외에도 파워셸 7에는 이 목적을 위한 새로운 연산자가 있습니다.왼쪽이 $null인 경우에만 할당이 수행됩니다.

$programname ??= 'foo'

JNK와 David의 (올바른) 답변을 기반으로 하려면, Jeffrey Snover가 PowerShell에서 부울식의 모든 사용 사례를 안내하는 이 훌륭한 블로그 게시물을 확인하십시오.변수의 존재를 검사하는 방법으로 끝납니다.

https://devblogs.microsoft.com/powershell/boolean-values-and-operators/

-is 또는 -isnot는 변수가 설정된 데이터 유형을 확인하는 것입니다.예:

$Test -is [String] -or $Test -isNot [Int]

선언되지 않은 $var는 {$Test -eq $null}을(를) 사용하여 평가할 수 있습니다.코드의 어느 곳에서든 $var를 무효화하면 다른 방식으로 평가해야 합니다.

저는 개인적으로 스크립트에서 사용할 $var를 먼저 무효화하여 미리 설정했습니다.

[Array]$TestArray = @()
[String]$TestString = $null

[String]을 사용하는 경우:: 비어 있고 var는 True를 반환하지 않고 false를 반환하는 빈 공간을 선택합니다.

$TestString -eq [String]::Empty

문자열이 비어 있는지 여부를 평가하고 공백을 무시하려면 다음 방법을 사용합니다.

[string]::IsNullOrWhiteSpace($TestString)

배열이 비어 있는지 평가하려면 $var를 사용해야 합니다.세어보세요.

$TestArray.Count -ge 1

언급URL : https://stackoverflow.com/questions/9181473/powershell-testing-a-variable-that-hasnt-being-assign-yet

반응형