source

문자열이 NULL 또는 공백이 아닌지 확인합니다.

factcode 2023. 10. 6. 22:03
반응형

문자열이 NULL 또는 공백이 아닌지 확인합니다.

아래 코드에서 version string이 비어있지 않은지 확인하고 요청 변수에 그 값을 추가해야 합니다.

if ([string]::IsNullOrEmpty($version))
{
    $request += "/" + $version
}

만약 조건이 아니라면 어떻게 체크해야 합니까?

if (-not ([string]::IsNullOrEmpty($version)))
{
    $request += "/" + $version
}

사용할 수도 있습니다.!대신에-not.

반드시 [string]:: 접두사를 사용할 필요는 없습니다.이는 다음과 같은 방식으로 작동합니다.

if ($version)
{
    $request += "/" + $version
}

null 또는 빈 문자열인 변수는 false로 평가됩니다.

다른 많은 프로그래밍 및 스크립팅 언어와 마찬가지로 다음을 추가하여 작업을 수행할 수 있습니다.!상태 앞에

if (![string]::IsNullOrEmpty($version))
{
    $request += "/" + $version
}

변수가 매개 변수인 경우 아래와 같은 고급 함수 매개 변수 바인딩을 사용하여 null 또는 empty가 아님을 확인할 수 있습니다.

[CmdletBinding()]
Param (
    [parameter(mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$Version
)
if (!$variablename) 
{
    Write-Host "variable is null" 
}

이 간단한 대답으로 문제가 해결되길 바랍니다.출처

먼저 $Version을 문자열로 정의합니다.

[string]$Version

파라미터라면 Samselvaprabu에서 게시한 코드를 사용하거나 사용자에게 오류를 제시하지 않으려면 다음과 같은 작업을 수행할 수 있습니다.

while (-not($version)){
    $version = Read-Host "Enter the version ya fool!"
}
$request += "/" + $version

[string]을(를) 사용할 수 있습니다.: 문자열인 경우 NullOr Empty($version) 메서드입니다.하지만 파워셸에서 (데이터 종류에 상관없이) 널을 확인할 수 있는 보편적인 방법을 찾고 있었습니다.PowerShell에서 null(또는 null) 값을 확인하는 것은 어렵습니다.($value - eq $null) 또는 ($value -ne $null)을 사용하는 것이 항상 가능한 것은 아닙니다.if($value)도 마찬가지입니다.그것들을 사용하면 나중에 문제가 생길 수도 있습니다.
아래 Microsoft 기사(In IT's Full)를 읽고 Powershell에서 Null이 얼마나 까다로운지 파악하십시오.

[https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-null?view=powershell-7.1 ][1]

저는 PowerShell에서 null(또는 null) 값을 확인하기 위해 아래 두 가지 함수를 작성했습니다.저는 그들이 모든 가치와 데이터 유형에 적합해야 한다고 생각합니다.

누군가가 도움이 되길 바랍니다.왜 MS가 파워셸에서 널을 다루기 쉽게(그리고 덜 위험하게) 파워셸에 이런 것을 기본적으로 넣지 않았는지 잘 모르겠습니다.

누군가에게 도움이 되었으면 좋겠습니다.

만약 누군가가 보이지 않는 "낙하산"이나 이 방법에 대한 문제를 알고 있다면, 우리가 알 수 있도록 여기에 댓글을 달아주세요.감사합니다!

<#
*********************  
FUNCTION: ValueIsNull
*********************  
Use this function ValueIsNull below for checking for null values
rather using -eq $null or if($value) methods.  Those may not work as expected.     
See reference below for more details on $null values in PowerShell. 
[https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-null?view=powershell-7.1][1]

An if statement with a call to ValueIsNull can be written like this:
if (ValueIsNull($TheValue))    
#>

function ValueIsNull {
  param($valueToCheck)
  # In Powershell when a parameter of a function does not have a data type defined,
  # it will create the parameter as a PSObject. It will do this for 
  # an object, an array, and a base date type (int, string, DateTime, etc.)
  # However if the value passed in is $null, then it will still be $null.
  # So, using a function to check null gives us the ability to determine if the parameter
  # is null or not by checking if the parameter is a PSObject or not.
  # This function could be written more efficiently, but intentionally 
  # putting it in a more readable format.
  # Special Note: This cannot tell the difference between a parameter
  # that is a true $null and an undeclared variable passed in as the parameter.
  # ie - If you type the variable name wrong and pass that in to this function it will see it as a null.
  
  [bool]$returnValue = $True
  [bool]$isItAnObject=$True
  [string]$ObjectToString = ""
  
  try { $ObjectToString =  $valueToCheck.PSObject.ToString() } catch { $isItAnObject = $false }

  if ($isItAnObject)
  {
    $returnValue=$False
  }

  return $returnValue
}
<# 
************************
FUNCTION: ValueIsNotNull 
************************
Use this function ValueIsNotNull below for checking values for 
being "not-null"  rather than using -ne $null or if($value) methods.
Both may not work as expected.

See notes on ValueIsNull function above for more info.

ValueIsNotNull just calls the ValueIsNull function  and then reverses
the boolean result. However, having ValueIsNotNull available allows
you to avoid having  to use -eq and\or -ne against ValueIsNull results.
You can disregard this function and just use !ValueIsNull($value). 
But, it is my preference to have both for easier readability of code.

An if statement with a call to ValueIsNotNull can be written like this:
if (ValueIsNotNull($TheValue))    
#>

function ValueIsNotNull {
  param($valueToCheck)
  [bool]$returnValue = !(ValueIsNull($valueToCheck))
  return $returnValue
}

ValueIsNull에 대한 다음 호출 목록을 사용하여 테스트할 수 있습니다.

  $psObject = New-Object PSObject
  Add-Member -InputObject $psObject -MemberType NoteProperty -Name customproperty -Value "TestObject"
  $valIsNull = ValueIsNull($psObject)

  $props = @{
    Property1 = 'one'
    Property2 = 'two'
    Property3 = 'three'
    }
  $otherPSobject = new-object psobject -Property $props
  $valIsNull = ValueIsNull($otherPSobject)
  # Now null the object
  $otherPSobject = $null
  $valIsNull = ValueIsNull($otherPSobject)
  # Now an explicit null
  $testNullValue = $null
  $valIsNull = ValueIsNull($testNullValue)
  # Now a variable that is not defined (maybe a type error in variable name)
  # This will return a true because the function can't tell the difference
  # between a null and an undeclared variable.
  $valIsNull = ValueIsNull($valueNotDefine)

  [int32]$intValueTyped = 25
  $valIsNull = ValueIsNull($intValueTyped)
  $intValueLoose = 67
  $valIsNull = ValueIsNull($intValueLoose)
  $arrayOfIntLooseType = 4,2,6,9,1
  $valIsNull = ValueIsNull($arrayOfIntLooseType)
  [int32[]]$arrayOfIntStrongType = 1500,2230,3350,4000
  $valIsNull = ValueIsNull($arrayOfIntStrongType)
  #Now take the same int array variable and null it.
  $arrayOfIntStrongType = $null
  $valIsNull = ValueIsNull($arrayOfIntStrongType)
  $stringValueLoose = "String Loose Type"
  $valIsNull = ValueIsNull($stringValueLoose)
  [string]$stringValueStrong = "String Strong Type"
  $valIsNull = ValueIsNull($stringValueStrong)
  $dateTimeArrayLooseValue = @("1/1/2017", "2/1/2017", "3/1/2017").ForEach([datetime])
  $valIsNull = ValueIsNull($dateTimeArrayLooseValue)
  # Note that this has a $null in the array values.  Still returns false correctly.
  $stringArrayLooseWithNull = @("String1", "String2", $null, "String3")
  $valIsNull = ValueIsNull($stringArrayLooseWithNull)

언급URL : https://stackoverflow.com/questions/45008016/check-if-a-string-is-not-null-or-empty

반응형