【问题标题】:What is the difference between PowerShell versions and their abilities to manage Azure Active Directory?PowerShell 版本及其管理 Azure Active Directory 的能力有什么区别?
【发布时间】:2020-11-24 13:07:57
【问题描述】:

Microsoft 产品的文档非常糟糕,这让我很难过,PowerShell 也不例外。到目前为止,我一直在使用不同版本的 PowerShell,但离理解不同版本还有很长的路要走,尤其是涉及到 Azure 时。

据我了解,PowerShell 5 已停产,PowerShell ISE 也已停产。按照 Microsoft 的建议,我切换到最新版本 7 和 Visual Studio Code。我不得不承认,他们合作得很好。 (我仍然想知道为什么在 Visual Studio 中开发 PowerShell 没有原生支持。)

对于 Azure,有 Azure、AzureRM、msol 和 Az 模块。后者显然是取代 Azure 和 AzureRM 的最新版本。正如我们所知,它们不能一起工作,不能向上/向下兼容,同时它们也不提供相同的功能。

现在我想使用 PowerShell 将域添加到 Azure Active Directory。我发现的唯一 cmdlet 是 New-AzureAdDomain - 它在 PowerShell 7 中不起作用。经过一些研究,我发现 this article 它告诉我不能使用 PowerShell 7,而应该使用 PowerShell 6:

对于 Azure Active Directory PowerShell for Graph 模块,您必须 使用 PowerShell 5.1 或更高版本。对于 Microsoft Azure Active Windows PowerShell 模块的目录模块,您必须使用 PowerShell 版本 5.1 或更高版本,直到 PowerShell 版本 6。您不能 使用 PowerShell 版本 7。

对我来说,PowerShell 版本及其 Azure 模块似乎是一个相当大的混乱。但我认为这可能只是因为我不了解它们实际上应该如何协同工作而看起来像这样。如果有人能对此有所了解,我将不胜感激?最初,我的问题应该是“如何使用 PowerShell 7 将域添加到 AAD”,但我希望了解其背后的概念,也许这可以帮助我自己。

【问题讨论】:

  • 对于 Azure AD 相关命令,您需要安装 AzureAD 模块。这与 Az 模块不同。 docs.microsoft.com/en-us/powershell/module/azuread/…
  • 值得注意的是,我正在使用AzureAd.Standard.Preview,这似乎可以与 PowerShell 7 一起使用。唯一的问题是您可能在 Az.Accounts 模块和 Azure AD 模块之间使用了conflicts,因为后者使用某些程序集的一些较新版本。有时它可以先加载较新的依赖项。我替换了模块中的旧模块,但不能将此作为任何类型的良好做法。

标签: azure powershell azure-active-directory azure-powershell


【解决方案1】:

真是一团糟。首先不要混淆 WindowsPowershell 和 PowershellCore 版本。

Powershell 1.0 - 5.1 都是 WindowsPowershell,这意味着它们带有 Windows 操作系统并且只能在 Windows 上运行。

Powershell 6.0+ 是 PowershellCore 版本,它们不附带任何操作系统(目前)并且是跨平台的。这两种类型可以在同一台 Windows 机器上共存,因为它们甚至不为应用程序 exe 使用相同的名称。

他们为什么分开?好吧,在 Windows 上,您拥有 .NET Framework,它是一堆用 c# 编写的库,您可以在应用程序中使用它们,因此您不必为所有内容编写代码。然而,Net Framework 仅适用于 Windows,因此它基本上将 C# 绑定到 Windows。微软意识到,为了让 C# 更有趣,他们必须让它跨平台,所以他们想出了 Net Core。它是 Net Framework 的跨平台版本。适用于 Linux、MacO 和 Windows。 Powershell 是基于 Net Framework 构建的,因此他们看到了创建新版本 Powershell 的机会,该版本也是跨平台的。 所以WindowsPowershell是基于Net Framework,而PowershellCore是基于Net Core。 Microsoft 计划在 5.0 版中合并 Net Framework 和 Net Core。不知道他们是否也想合并 Powershell 版本,但他们称它为 Powershell 7 而不是 PowershellCore 7,就像他们对版本 6 所做的那样。

PowershellCore 的主要问题是属于其他产品的模块。以 SCCM、AD 或其他方式为例。您可以通过拥有 WindowsServer 并安装这些功能来获得这些模块。或者在客户端机器上安装 RSAT。这些模块中的大多数现在都在版本 7 中可用。

谈到 Azure 模块,您可以从https://github.com/Azure/azure-powershell/releases/latest 下载 Azure 模块 您可以使用任一版本的 Powershell。如果您特别需要 AzureAD: https://docs.microsoft.com/en-us/powershell/azure/active-directory/install-adv2?view=azureadps-2.0

您可以在此处阅读有关 Powershell 的更多信息: https://devblogs.microsoft.com/powershell/announcing-PowerShell-7-0/

【讨论】:

  • 感谢解释,说得通,有助于理解。不过,我真的不明白为什么他们在我引用的那个页面上不鼓励使用 PS7。
  • 它确实这么说,但在实际模块的页面上却没有:docs.microsoft.com/en-us/powershell/azure/active-directory/… 我将它安装在我的 Powershell 7 上就好了。
  • 更糟糕的是,可以使用 New-AzADUser cmdlet 创建用户,使用 AAD 服务器的本地身份验证。但是,要创建域,需要 New-AzureADDomain cmdlet,它是 AzureAD 模块的一部分,它再次需要单独的身份验证。有什么理由吗?
  • AzureRM 被 Az 取代 - azure.microsoft.com/en-us/blog/… AzureAD 专门绑定到 azure 活动目录,而 Az 是围绕 Azure 的一组模块,而不仅仅是活动目录。我认为他们包含几个类似于 AzureAD 中的 cmdlet 的原因是在 Azure 中很难避免 AD,他们希望你使用它。
【解决方案2】:

只是关于 Azure 模块的说明。随着资源管理器的添加,Azure 经历了巨大的变化(V1 与 V2 的区别)。旧的动词 AzureNOUN 库用于预资源管理器 Azure。动词 AzureRMnoun 版本只是用“AzureRM”前缀输入太多了。最新的动词-AzNOUN 版本几乎与 AzureRM 版本一对一匹配。所以主要是改名。

每个 cmdlet 库/模块都针对某个版本的 PowerShell,因此在使用模块之前,请检查需要哪个版本。在查看 Windows 管理时,PowerShellCore 版本仍然是一种“正在进行中的工作”。 PowerShell 5.1 仍然是我的“首选”版本,除非我在非 Windows 环境中工作。

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2017-11-26
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多