【问题标题】:Can I convert a system.string to system.object in PowerShell?我可以在 PowerShell 中将 system.string 转换为 system.object 吗?
【发布时间】:2018-07-05 23:56:55
【问题描述】:

有没有办法在 PowerShell 中将 system.string 转换为 system.object?

我已经有一个 csv 文件,我希望某些用户从 Azure 订阅中删除一些角色分配。 首先,我试过了

Import-Csv C:\Users.csv | Foreach-Object {Remove-AzureRmRoleAssignment -SignInName $Users}

其中 SignInName 是 csv 文件中的一列,其中包含我要以以下格式 x@y.com 删除的用户,但在此期间它不起作用,它没有产生任何错误。 这就是为什么我尝试了另一种方法,将登录列导入到变量中。然后,我尝试删除它:

$Users = Import-Csv 'C:\Users.csv' | select SignInName
Foreach-Object {Remove-AzureRmRoleAssignment -SignInName $Users}

结果我得到了那个错误:

【问题讨论】:

  • 你为什么要这样做?
  • Ofc 是有的,但您实际上想达到什么目的?
  • 我想使用 PowerShell 删除特定的 Azure 帐户。我已经将它们保存在 csv 文件中。所以,当我尝试 Import-Csv C:\Users.csv | Foreach-Object {Remove-AzureRmAccount -Identity $_.SignInName},它不起作用并且没有产生错误。所以,我尝试了: $Users = Import-Csv 'C:\Users.csv' |选择 SignInName Foreach-Object {Remove-AzureRmAccount -Username $Users} 我收到一条错误消息,告诉我它无法将 system.object 转换为 system.string
  • 我认为你问错了问题。编辑您的问题以实际包含您刚刚在评论中添加的大部分详细信息 - 它告诉我们您正在尝试做什么以及您已经尝试过什么。如果错误是抱怨将对象转换为字符串,为什么您认为解决方案的一部分是将字符串转换为对象?情况正好相反。

标签: powershell azure


【解决方案1】:

我相信 Foreach-Object 要么必须通过管道传递一个对象,要么被告知使用 imputobject 参数使用哪个对象 试试这个:

$Users = Import-Csv 'C:\Users.csv' | select SignInName
$Users|Foreach-Object {Remove-AzureRmAccount}

或者在我看来更可重用的代码:

$Users = Import-Csv 'C:\Users.csv' | select SignInName
Foreach($user in $users {Remove-AzureRmAccount -Username $user}

【讨论】:

  • 试过了,还是没有删除帐号
【解决方案2】:

通过使用

$Users = Import-Csv 'C:\Users.csv' | select SignInName

从技术上讲,您仍然返回一个表对象,它只是一个包含一列的表。你想要的是一个字符串数组,所以每次使用 foreach 迭代都会给你一个字符串:

$Users = Import-Csv 'C:\Users.csv' | select -ExpandProperty SignInName

然后您可以使用上面的 foreach 行,或者恕我直言,甚至可以使用更漂亮的 powershell:

$users | % { Remove-AzureRmAccount -Username $_ }

【讨论】:

  • 除此之外,我们可以讨论一下您尝试使用 Remove-AzurermAccount 实现的目标。如果您尝试从目录中删除用户,请查看 Remove-AzureRmAdUser docs.microsoft.com/en-us/powershell/module/azurerm.resources/…
  • 试过了,还是没有删除帐号
  • 您是否使用了上面的代码,但改用了“Remove-AzureRmAdUser -UserPrincipalName $_ -Force”?
  • 抱歉,我的意思是删除角色分配而不是用户本身。所以,我用 Remove-AzureRmRoleAssignment 试过了,但还是不行。
  • 尝试分离问题:尝试使用用户名手动运行该命令,并先查看它是否有效。您也可以尝试在循环中使用命令 Write-Host "Trying to delete $_",以便查看用户是否从 csv 正确读取
【解决方案3】:

Convertfrom-string 做到了 并且可以使用参数编辑名称

要小心,尽管它有时会歪曲数据并将对象放在错误的字段中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多