当前位置: 首页 > 知识库问答 >
问题:

powershell——构建一个非空字符串的动态变量,然后检查这个动态变量,只要不是空的,就在前面加上字符

夏锐藻
2023-03-14

我试图动态构建一个包含字符串的变量。然后我要检查这个新变量,如果它不是空的,请在“;”前面加上“;”添加到每个添加的字符串。

基本上,我正在构建一个Set-ADUser-Replace@{DynamicVarialble}命令,并希望动态变量最多包含三个不同的值,但只包含那些不为空或null的值。如果它是字符串中的第一个值,请不要在“;”前面添加它。所以结果如下:

< code > Set-ADUser-identity $ person-Replace @ { mobile number = $ number;phoneNUmer = $ phoneNumber寻呼机= $ page number }

但这样做是-- Replace @ { $ dynamic variable }-在下面的代码中它将是$ADUpdater变量或数组。

注意:如果其中一个输入变量为空,请不要将其包含在“动态变量”或数组中。如果它是添加的第一个变量,请不要在前面加上分号。

希望这有意义...所以如果输入是:

$otherMobile = "555-222-1111"
$otherHomePhone ="" ##(empty or null)
$otherPager = "555-555-5555"

那么它将是:

设置ADUser-identity$person-Replace@{otherMobile=“555-222-111”;otherPager=“555.555-5555”}

     $person =$userID
     $number= $otherMobile
     $homeNumber = $otherHomePhone
     $pagerNumber = $otherPager

     [String]$ADupdater = @()
     if (![string]::IsNullOrEmpty($otherMobile)){
          [string]$ADupdater += "otherMobile=$number"
     }
     if (![string]::IsNullOrEmpty($otherHomePhone)){
          [string]$ADupdater += "otherHomePhone=$homeNumber"    
     }
     if (![string]::IsNullOrEmpty($otherPager)){
          [string]$ADupdater += "otherPager=$otherPager"    
     }
    
     Foreach ($item in $ADupdater){
         if ([string]::IsNullOrEmpty($item))
         {
            $ADupdater += $ADupdater 
         }
         else {
            $ADupdater += ';' + $ADupdater
         }
     }

    Write-host "this is ADUpdated: $ADupdater"

共有2个答案

宫亦
2023-03-14

对于那些感兴趣的人(并感谢@Mathias R.Jessen),什么对我有效(尽管可能不干净或不高效)。。。

$ADupdater = @{}

$values = @{
  otherMobile = $otherMobile
  otherHomePhone = $otherHomePhone
  otherPager = $otherPager
}

if (! [string]::IsNullOrEmpty($otherMobile)) {
    $ADupdater.add('otherMobile',$otherMobile)
}
if (! [string]::IsNullOrEmpty($otherHomePhone)) {
    $ADupdater.add('otherHomePhone',$otherHomePhone)
}
if (! [string]::IsNullOrEmpty($otherPager)) {
    $ADupdater.add('otherPager',$otherPager)
}

Set-ADUser -Identity $($person) -Replace $ADupdater

因为我将otherMobile、otehrHomePhone和otherPager的值作为参数传递给我的脚本,所以我无法让Mathias的以下建议生效:

foreach($entry in $values){
  if(-not [string]::IsNullOrEmpty($entry.Value)){
    $ADupdater[$entry.Name] = $entry.Value
  }
}

干杯!

曹鸿风
2023-03-14

此方法不起作用,因为 -Replace 参数实际上不接受字符串值。

让我们看一下 -替换 参数:

PS ~> $setADUserCommand = Get-Command Set-ADUser
PS ~> $setADUserCommand.Parameters['Replace']


Name            : Replace
ParameterType   : System.Collections.Hashtable
ParameterSets   : {[Identity, System.Management.Automation.ParameterSetMetadata]}
IsDynamic       : True
Aliases         : {}
Attributes      : {Identity, System.Management.Automation.ValidateNotNullOrEmptyAttribute, Microsoft.ActiveDirectory.Management.Commands.ValidateAttributeValueHashtableAttribute}
SwitchParameter : False

请注意ParameterType值如何列为HashTable-因此我们需要将哈希表作为参数传递给该参数。

好的一面是哈希表可以通过编程修改,所以我们仍然可以构造您想要的参数:

# Let's start by creating an empty hashtable
$ADupdater = @{}

$otherMobile = "555-222-1111"
$otherHomePhone ="" ##(empty or null)
$otherPager = "555-555-5555"

# now we just need to populate the hashtable instead of a string
if (![string]::IsNullOrEmpty($otherMobile)){
    $ADupdater["otherMobile"] = $otherMobile
}
if (![string]::IsNullOrEmpty($otherHomePhone)){
    $ADupdater["otherHomePhone"] = $otherHomePhone
}
if (![string]::IsNullOrEmpty($otherPager)){
    $ADupdater["otherPager"] = $otherPager
}

# Now we simply pass the hashtable to Set-ADUser
Set-ADUser -Identity $person -Replace $ADupdater

您可能希望通过将候选值和属性名称存储在哈希表中来使自己的生活更轻松 - 这将使代码更容易添加新属性(因为您不需要单独的if(![字符串]::...){...}每个新属性的 块):

$ADupdater = @{}

$values = @{
  otherMobile = "555-222-1111"
  otherHomePhone ="" ##(empty or null)
  otherPager = "555-555-5555"
}

foreach($entry in $values){
  if(-not [string]::IsNullOrEmpty($entry.Value)){
    $ADupdater[$entry.Name] = $entry.Value
  }
}
 类似资料:
  • 问题内容: 我想知道上面的代码是否可用于检查变量是否为null或为空。 问题答案: 是的,该代码正是这样做的。 您还可以使用: 编辑: 使用添加的值信息,您需要: 一个值不能包含值。

  • 假设be有两个变量 有了上面的信息,是否有方法使?

  • 问题内容: if var is ‘stringone’ or ‘stringtwo’: dosomething() 这行不通!我有一个变量,当它是两个值中的一个时,我需要它执行某些操作,但它不会输入if语句。在Java中工作。如何用Python编写? 问题答案: 这不能满足您的期望: 它与: 始终为真,因为它被认为是“真”值。 有两种选择: 或者您可以编写单独的相等性测试, 不要使用,因为比较对象

  • 我正在构建一个应用程序,它解析JSON模板,然后用新数据替换对象的值。我的问题是在JSON中表示空数据的标准方式是什么? null 这是正确的吗?

  • 问题内容: 我最近发现了如何通过此方法在python中动态创建变量: 从而创建变量。 我的问题是,这是个好主意吗?还是应该总是提前声明变量? 问题答案: 我认为最好使用字典: 我认为这更像Python。

  • 问题内容: 我正在使用一个jQuery AJAX请求到一个名为的页面,该页面连接到我的数据库并插入一行。这是代码: 有问题的线是。它似乎只是返回一个空字符串,并且在我的数据库中,我看到的所有列都是空白条目。如果我删除,它会很好。 如果有帮助,这是我的jQuery代码。 所有这些jQuery代码都可以正常工作,我已经自己独立测试过。 非常感谢任何帮助,谢谢。 问题答案: 您是否确定1000%确实包含