【问题标题】:PowerShell Scipt for adding new Credentials用于添加新凭据的 PowerShell 脚本
【发布时间】:2020-06-10 11:35:23
【问题描述】:

我正在尝试编写脚本以根据所选组自动分配凭据。我收到很多语法错误。你能帮忙吗?

 Function Add-OSCCredential
{
    $target = Read-Host "Group number"
    If($target)
    {
        If($target -eq 1)
        {[string]$result = cmdkey /add:Group1 /user:Group1 /pass:Pass1}
        [ElseIf($target -eq 2)
        {[string]$result = cmdkey /add:Group2 /user:Group2 /pass:Pass2}]
        {
        [ElseIf($target -eq 3)
        {[string]$result = cmdkey /add:Group3 /user:Group3 /pass:Pass3}]
        {
        If($result -match "The command line parameters are incorrect")
            {Write-Error "Failed to add Windows Credential to Windows vault."}
        ElseIf($result -match "CMDKEY: Credential added successfully")
            {Write-Host "Credential added successfully."}
    }
    Else
    {
        Write-Error "Internet(network address) or username can not be empty,please try again."
        Add-OSCCredential
    }

}

Add-OSCCredential

【问题讨论】:

    标签: windows powershell shell credentials


    【解决方案1】:

    我建议你使用适当的编辑器,例如 vscode,它会给你很多关于语法错误的提示。

    在您的情况下,有很多 [] 和 {} 括号没有意义。

    仅考虑该函数的语法,以下应该“有效”:

    Function Add-OSCCredential {
      $target = Read-Host "Group number"
      If ($target) {
        If ($target -eq 1) {
          [string]$result = cmdkey /add:Group1 /user:Group1 /pass:Pass1
        }
        ElseIf ($target -eq 2) {
          [string]$result = cmdkey /add:Group2 /user:Group2 /pass:Pass2
        }
        ElseIf ($target -eq 3) {
          [string]$result = cmdkey /add:Group3 /user:Group3 /pass:Pass3
        }
    
        If ($result -match "The command line parameters are incorrect") {
          Write-Error "Failed to add Windows Credential to Windows vault."
        }
        ElseIf ($result -match "CMDKEY: Credential added successfully") {
          Write-Host "Credential added successfully."
        }
      }
      Else {
        Write-Error "Internet(network address) or username can not be empty,please try again."
        Add-OSCCredential
      }
    
    }
    

    编辑:

    您很可能希望研究一个现成的 PowerShell 模块,例如 CredentialManager,这样您就不必自己摆弄 cmdkey.exe。

    【讨论】:

      【解决方案2】:

      Read-Host 的返回值始终是一个字符串,但您在测试中将其视为整数。
      为了更好的可读性,我建议使用switch 而不是另一组if..elseif..else 语句。

      类似这样的:

      function Add-OSCCredential {
          $target = Read-Host "Enter Group number (1-3)"
          if ($target -match '1|2|3') {
              switch ([int]$target) {
                  1 {[string]$result = cmdkey /add:Group1 /user:Group1 /pass:Pass1}
                  2 {[string]$result = cmdkey /add:Group2 /user:Group2 /pass:Pass2}
                  3 {[string]$result = cmdkey /add:Group3 /user:Group3 /pass:Pass3}
              }
              if($result -match "The command line parameters are incorrect") {
                  Write-Error "Failed to add Windows Credential to Windows vault."
              }
              elseif ($result -match "Credential added successfully") {
                  Write-Host "Credential added successfully."
              }
              else {
                  Write-Warning $result
              }
          }
          else {
              Write-Warning "Group number must be either 1, 2 or 3. Please try again."
              Add-OSCCredential
          }
      }
      
      Add-OSCCredential
      

      【讨论】:

        猜你喜欢
        • 2018-11-26
        • 1970-01-01
        • 2019-05-23
        • 2017-10-16
        • 1970-01-01
        • 2013-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多