Powershell 不能对空值表达式调用方法

Powershell 不能对空值表达式调用方法,powershell,Powershell,我的Powershell脚本运气不太好,所以任何帮助都会很好!我试图做的是引用包含多行用户名的测试文件,并将其与列A1上的Excel电子表格进行比较。如果存在,则应清空用户名 $users = Get-Content "E:\temp\test.txt" foreach ($user in $users) { set-aduser $user -fax " " $answer1 = read-host "Please Make a Selection" if ($

我的Powershell脚本运气不太好,所以任何帮助都会很好!我试图做的是引用包含多行用户名的测试文件,并将其与列A1上的Excel电子表格进行比较。如果存在,则应清空用户名

$users = Get-Content "E:\temp\test.txt"
foreach ($user in $users) {

    set-aduser $user -fax " "

    $answer1 = read-host "Please Make a Selection"  
    if ($answer1 -eq 1){ 
        $location="Melbourne"
    }  
    if ($answer1 -eq 2){ 
        $location="Sydney"
    }
    if ($answer1 -eq 3){ 
        $location="Adelaide"
    }
    if ($answer1 -eq 4){ 
        $location="Brisbane"
    }
    if ($answer1 -eq 5){ 
        $location="Perth"
    }

    $ExcelPath = 'E:\temp\FX MFD UserPIN.xlsx'
    $Excel = New-Object -ComObject Excel.Application
    $Excel.Visible = $true
    $ExcelWorkBook = $Excel.Workbooks.Open($ExcelPath)
    $ExcelWorkSheet = $Excel.WorkSheets.item("$location")


    $Range = $ExcelWorkSheet.Range("A1").EntireColumn
    $Search = $Range.find($user)

    If($Search.value() -contains $user) 
    {

        Write-Host "User FOUND, removing now"
        $Search.value() = ""
    }
    else {
        Write-Host "User NOT FOUND"
    }
}
错误代码如下:

You cannot call a method on a null-valued expression.
At E:\temp\testsest.ps1:35 char:12
+         If($Search.value() -contains $SearchString)
 +            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
如何替换$Search以获取$user

因此,在检查是否存在匹配之前,必须检查
$Search
中是否存在空值

if ($Search -ne $null) { 
    if ($Search.value -contains $user) 
    {
        Write-Host "User FOUND, removing now"
        $Search.value = ""
    }
    else {
        Write-Host $Search.value," what did we find?!"
    }
}
else {
    Write-Host "User NOT FOUND"
}
另外,
value
不是一个方法,它是一个属性,所以不要使用圆括号。

因此,在检查是否存在匹配之前,必须检查
$Search
中是否存在空值

if ($Search -ne $null) { 
    if ($Search.value -contains $user) 
    {
        Write-Host "User FOUND, removing now"
        $Search.value = ""
    }
    else {
        Write-Host $Search.value," what did we find?!"
    }
}
else {
    Write-Host "User NOT FOUND"
}

另外,
value
不是一个方法,它是一个属性,所以不要使用圆括号。

谢谢Vesper。我已经做了一些更改,现在可以确认它是否有效

if ($Search -ne $null) { 

        if ($Search.text -contains $user) 
        {
           Write-Host "User FOUND, removing now"
           $Range.replace($Search,"")
        }
        else {
            Write-Host $Search.text," what did we find?!"
        }
    }
    else {
        Write-Host "User NOT FOUND"
    }

谢谢Vesper。我已经做了一些更改,现在可以确认它是否有效

if ($Search -ne $null) { 

        if ($Search.text -contains $user) 
        {
           Write-Host "User FOUND, removing now"
           $Range.replace($Search,"")
        }
        else {
            Write-Host $Search.text," what did we find?!"
        }
    }
    else {
        Write-Host "User NOT FOUND"
    }

看起来像$Range.find($user)返回null。您应该检查这一点或提供一份excel工作表。检查Vesper关于空值表达式异常的帖子:看起来像$Range。find($user)返回空值。您应该检查这一点或提供excel工作表的一部分。检查Vesper关于空值表达式异常的帖子: