gpt4 book ai didi

csv - Powershell:如果 CSV 条目为空,如何引发错误

转载 作者:行者123 更新时间:2023-12-03 00:37:06 24 4
gpt4 key购买 nike

我编写了一个通过 AD 终止过程运行的扩展脚本,该脚本可以从 CSV 中获取必要的信息。如果 CSV 中的条目为空白,我该如何制作它以使其出错?我尝试使用 Try-Catch、If-Else 以及我知道如何做的所有事情。我已经尝试更改错误操作,我可以让它抛出系统生成的错误(例如“无法将参数“身份”绑定(bind)到目标......”),但我无法让它做我想做的事。请看下面的代码示例:

(是的,我知道我在重复值。这在脚本后面很重要,而不是我遇到问题的部分)

    $owner = $user.'Network User ID'}
$loginID = $user.'Network User ID'
$Identity = Get-ADUser -Identity $owner -Properties Displayname |Select-Object -ExpandProperty Displayname
$manager = $user.'Provide Inbox Access To'
$NewOwner = $user.'Provide users email group ownership to'
$NewOwnerID = $User.'Provide users email group ownership To'

如果 CSV 中的任何条目为空白,我需要它做的是抛出一个错误,然后终止。我尝试过的最有希望的想法是:
    If ($Owner -eq $Null)
{
Write-Host "Invalid entry, the Network User ID field cannot be blank"
Write-Host "Press Enter to Exit..."
Exit
}
Else
{
#Do everything else
}

但即使这样仍然失败。

总之,如果 CSV 中的条目为空白,我需要做的是引发自定义终止错误。

任何帮助是极大的赞赏!

编辑

如果这有帮助,这里有更多真正的代码......
$Confirmation = Read-Host "Please double check the information in the file. Are you sure you want to continue? (Y/N)"

If($Confirmation -eq "Y")
{
Write-Host "You have chosen to proceed. Processing Termination" -BackgroundColor DarkCyan
#Import file
$file = "C:\TerminateUsers.csv"
$data = Import-Csv $file
#Set disabled OU
$disabledOU = "OU=Users,OU=Disabled Accounts, OU=Corporate"

$colOutput = @()
foreach ($user in $data)
{
#Grab variables from CSV
$owner = $user.'Terminated Network User ID'}
$loginID = $user.'Terminated Network User ID'

#Displayname required for Outlook functions
$Identity = Get-ADUser -Identity $owner -Properties Displayname |Select-Object -ExpandProperty Displayname
$manager = $user.'Provide Inbox Access To'
$NewOwner = $user.'Provide users email group ownership to'
$NewOwnerID = $User.'Provide users email group ownership To'
If (Get-ADUser -LDAPFilter "(sAMAccountName=$loginID)")
{
$date = Get-Date -Format d
#Disable account, change description, disable dialin, remove group memberships
Set-ADUser -Identity $loginID -Enabled $false
Set-ADUser -Identity $loginID -Replace @{Description = "Terminated $date"}
Set-ADUser -Identity $loginID -Replace @{msNPAllowDialin = $False}
RemoveMemberships $loginID

这不是全部,但这是我们正在处理的部分......

最佳答案

您将在这里遇到许多问题。

一、$Owner -eq $Null不会做你可能想做的事。主要问题是空字符串不是空值。他们是不同的。相反,您的测试应该是:

if ([string]::IsNullOrEmpty($owner)) { ... }

或者:
if ([string]::IsNullOrWhiteSpace($owner)) { ... }

如果字符串仅包含制表符、空格或其他空白字符,或者是空字符串,或者为 null,则第二个返回 true。

其次,要抛出异常,需要使用 throw关键词。见 Get-Help about_Throw .例如:
if ([string]::IsNullOrWhiteSpace($owner)) {
throw "Owner is null or empty.";
}

如果您将此嵌入到 try block ,您可以使用关联的 catch 捕获异常 block 。见 Get-Help about_Try_Catch_Finally .您也可以使用 Trap ,我相信(见 Get-Help about_Trap)。

最后,遇到错误时的默认操作由 $ErrorActionPreference 控制。多变的。该变量的默认值为 Continue ,因此将显示错误消息,但脚本将继续执行,就好像根本没有发生错误一样。我不完全确定这如何与手动抛出的异常和 try/catch block 一起工作,但除非我知道我希望我的脚本忽略错误,否则我几乎从每个脚本开始:
$ErrorActionPreference = Stop;

Get-Help about_Preference_VariablesGet-Help about_CommonParameters有关此的更多信息。

关于csv - Powershell:如果 CSV 条目为空,如何引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33390820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com