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

如果没有用户输入,那么在powershell中放入一个默认值,我该如何根据用户输入来更改变量呢?[重复]

杜俊楚
2023-03-14

我是powershell的新手,正在创建一个脚本,该脚本将使用用户输入创建一个共享点站点。其中一个变量是模板。我希望脚本说如果没有用户输入,那么$Template变量将是“团队站点”的默认值,否则如果有用户输入,则使用它。

我知道我的问题是“$Template = $TemplateInput”行,但我不知道在这里放什么来获取用户输入,而不是重复这个问题。也许我想多了,但我很确定这只是一个循环。

这是我的代码:

$TemplateInput =  Read-Host -Prompt "What sharepoint template should be used? Leave blank for default; Team Site"

if ($TemplateInput -eq $null) {
    $Template = "Team Site"
    Write-Host "Using Template: Team site"
    }
else {
        $Template = $TemplateInput
}

PAUSE

共有1个答案

隆扬
2023-03-14

注意:我撇开用户可能提供了全空格(一个或多个空格)而不是没有输入。将全空格视为空,并且通常从字符串的开头和结尾删除附带空格的一种简单方法是调用字符串的 。修剪()方法;例如:

$TemplateInput = (
  Read-Host -Prompt "What sharepoint template should be used? Leave blank for default; Team Site"
).Trim()

>

  • 不要将 PowerShell 中的字符串值与具有 -eq / -ne $null进行比较, PowerShell 中的字符串几乎从未$null;[注1]

    >

  • 如果用户未向读取主机提供交互式输入(只需按 Enter 键),则返回空字符串(“”“”,表示为 PowerShell 文本)- 从不$null

    另外,一般来说,re$var-eq$null:形式为$null-eq$var-即将比较值放在LHS上更为可取,因为PowerShell运算符可以作为过滤器,集合作为LHS值,在这种情况下,$var-eq$null将返回不是$null的元素的子数组-请参阅此答案。

    如果您知道要测试的值是字符串而不是$null,如读取主机的情况,请使用以下方法测试空字符串:

      < Li > < code > if('-eq $ template input)

    在可以$null值的情况下(如果该值未知为 [字符串] 类型,或者可能是字符串类型的 .NET API 的返回值,该 API 在情境中返回真正的$null):

    >

  • 仅简洁的 PowerShell,但略显晦涩的解决方案:

    >

  • -不是[2],正如圣地亚哥·斯夸松所建议的:

     # Test for $null or '' (empty string).
     if (-not $TemplateInput) # ... 
    

    或者,类似“”[3]

     # Test for $null or '' (empty string).
     if ($TemplateInput -like '') # ... 
    

    或者,为了也涵盖全空白情况,-notmatch'\S'[3]\S是匹配任何非空白字符的正则表达式转义序列。):

     # Test for $null or '' or all-whitespace input.
     if ($TemplateInput -notmatch '\S') # ... 
    

    。NET API解决方案:

    > < Li > < p > < code >[string]::IsNullOrEmpty()

    # Test for $null or '' (empty string).
    if ([string]::IsNullOrEmpty($TemplateInput)) # ... 
    

    或者,为了涵盖所有空白情况,[string]::IsNullOrWhiteSpace(),正如Theo所建议的:

    # Test for $null or '' or all-whitespace input.
    if ([string]::IsNullOrWhiteSpace($TemplateInput)) # ...
    

    [1]除非您特意使用[string]$str=[NullString]::值,它应该只用于. NET API调用。[string]$null-eq"$true(不像$null-eq"),因为[string]转换将$null转换为"。有关更多信息,请参阅此答案。

    [2]这利用了PowerShell的隐式到布尔转换逻辑:使用-not运算符强制将字符串操作数转换为布尔值,空字符串被视为$false,而任何非空字符串-无论其值如何-都是$true;类似地,$null始终转换为$false-请参阅此答案的底部,了解PowerShell到布尔转换的一般概述。

    [3]这依赖于这样一个事实,即-like-match/-notmatch,作为仅字符串运算符,将它们的LHS操作数强制为字符串,并且在这种转换中,$null被视为'(使用$null-like'验证)。请注意,这相当于对<code>类-match的目的是执行正则匹配。

  •  类似资料:
    • 问题内容: 我正在尝试创建一个基本菜单,以检查输入的变量是否与定义的变量匹配。如果定义了变量,则获取已定义变量的数据。 例。 我输入 应该相等 问题答案: 这似乎是您要找的东西: 但是,这可能不是最好的策略,因为错字或恶意用户很容易使您的代码崩溃,系统过载或执行他们喜欢的任何其他讨厌的事情。对于这种特殊情况,更好的方法可能是

    • 查看图像以供参考。 我是Java的初学者。

    • 我希望“请输入一个带有字母S的句子”循环,直到用户输入字母“S”

    • 当用户输入字符串(例如“”)时,程序应该给出输出“”,然后提示用户键入有效输入。当我键入字符串时,我会在线程“main”java.util.InputMismatchException中得到错误消息

    • 我想让程序根据我的扫描仪输入从ArrayList中进行选择。比如,我写早餐和甜食,它必须随机列出早餐甜食,并打印随机索引。 我还在学习Java,我只是在玩,并试图编码小项目来训练它。 下面是我已经写过的课程: 我是否可以将列表存储在变量中,可能是这样的: 我知道很难理解我,但英语不是我的主要语言,希望它能被理解。

    • 问题内容: 我遇到一种情况(在硒测试期间),在这种情况下,用户将收到安全代码。然后,用户必须先输入安全密码,然后才能继续操作。 我不太确定如何获得用户输入的值。我浏览了硒文档,并提出了这个建议。不幸的是,它并不是很有效。 有人可以指出我正确的方向吗? 问题答案: 似乎您必须先接受并关闭提示,然后才能存储和使用该值