当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

作者:精品下载站 日期:2024-12-14 07:26:53 浏览:13 分类:玩电脑

PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣


上次我们使用filter方法和Where-Object过滤对象。在这一部分中,我想回到基础知识,回到我们到目前为止还没有学到的东西。我所说的是使用 PowerShell Drives。但首先,让我们看一下上一部分的练习。

该系列的所有部分都可以在这里找到:PowerShell 初学者(系列)

回顾(第 10 部分)

现在我将提供第 10 部分练习中的解决方案。

对象位置:

使用 Get-Service 和Where-Object 仅显示正在运行的服务。

过滤器(需要 Active Directory):

使用 Filter 参数获取所有被禁用的用户。

好的。我们知道应该使用 Get-Service 和Where-Object 来仅显示正在运行的服务。请记住 PowerShell 初学者(第 8 部分)中的两步方法:PowerShell 的强大功能 - 与对象取得联系(获取成员、选择对象):但这里有点不同:我们使用获取成员,但是那么我们不使用Select-Object,而是使用Where-Object。


Get-Service | Get-Member

在那里您会找到属性“状态”。如果您在不带任何参数的情况下运行 Get-Service,您将找到属性状态的值:正在运行和已停止。这是显示所有已启动服务的命令:


Get-Service | Where-Object {$_.Status -eq 'Running'}

或者缩短一点:


Get-Service | Where-Object Status -EQ 'Running'

第二个练习要求过滤已禁用的 Active Directory 用户。这有点棘手,但您肯定发现 (Get-ADUser xxx | Get-Member) 没有禁用属性,而是启用属性。


Get-ADUser -Filter {enabled -eq 'False'}

复习第 10 部分


过滤是 PowerShell 中的一项关键技术。如果您正在使用过滤器,请先参阅“帮助”部分。 Where-Object 始终位于管道的右侧。左侧筛选。如果您可以选择管道左侧的过滤器或右侧的Where-Object,请选择左侧。


PowerShell 驱动器

PowerShell 驱动器到底是什么?它们的用途是什么?

Windows PowerShell 驱动器是一个数据存储位置,您可以像 Windows PowerShell 中的文件系统驱动器一样访问它

https://docs.microsoft.com/en-us/powershell/scripting/getting-started/cookbooks/managing-windows-powershell-drives?view=powershell-6

这是一个商店位置。它在哪里?以下是我们正在讨论的驱动器:


Get-PSDrive

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

您的屏幕可能与我的不同。该命令是在充当我的域的域控制器的 Windows Server 2016 上执行的。这就是我们看到 AD 驱动器(Active Directory)的原因。

PS 驱动器快速概述:

  • AD:活动目录
  • 别名:内置别名(例如:Get-ChildItem ==> ls)
  • C: 驱动器 C
  • 证书:证书位置存储
  • D:我的D盘
  • Env:环境变量(例如:$env:计算机名)
  • 功能:PowerShell 函数是代码块
  • HKCU、HKLM:注册处
  • 多变的
  • WSMan:PowerShell 远程处理

这是很多理论。一开始几乎太多了。让我们选择一个驱动器并仔细看看它,例如。 G。别名驱动器。


cd Alias:

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

这个驱动器里有什么?

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

我们已经知道带有红色边框的命令。

因此,我们现在知道我们可以使用别名,并且所有这些别名都存储在驱动器中。一项测试:

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

但它有什么用呢?将别名、证书、注册表保存在驱动器中有什么好处?首先我不得不说这对于脚本编写和开发人员来说更有用。但我将提供两个我认为非常有用的例子。

到目前为止我们学到了什么?


Windows PowerShell 驱动器是一个数据存储位置,您可以像 Windows PowerShell 中的文件系统驱动器一样访问它。使用 Get-PSDrive 显示所有驱动器(称为提供程序)。


它是做什么用的?

示例 1 - 对注册表进行一些操作

是否启用远程桌面?请记住,与几乎所有 Windows 设置一样,远程桌面设置位于 Windows 注册表中。我们可以使用PowerShell Drives浏览注册表(当然我们无法访问存储密码的SAM):


cd hklm:

dir

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

在此示例中,我检查远程桌面是否已启用(0=启用):


Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-Name "fDenyTSConnections"

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

现在,我将向您展示如果您升级为高级 PowerShell 用户可以做什么。使用此命令,我激活远程桌面和我的 Active Directory 域中的所有 Windows 服务器:

获取所有服务器的列表并将其存储在文件中:


(Get-ADComputer -Filter 'operatingsystem -like "*server*"').Name | Out-File C:\Temp\Servers.txt

然后我执行一些远程操作来激活远程桌面和所有已打开电源的 Windows 服务器。我使用 HKLM PowerShell 驱动器:


Get-Content C:\Temp\Servers.txt | ForEach-Object {Invoke-Command -ComputerName $_ {Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-Name "fDenyTSConnections" -Value 0;Enable-NetFirewallRule -DisplayGroup "Remote Desktop"}}

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

好一个。

示例 2 - 搜索内容

在那里吗?或者它不存在吗?通过使用 PowerShell 驱动器,您可以测试是否有东西存在。

有 ls 别名吗?


Test-Path alias:ls

是的。

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

另一个示例显示您的计算机上是否安装了 DigiCert 的证书。我们正在寻找这 2 个证书:


certmgr.msc

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

为此,我们必须导航到用户的证书驱动器和根文件夹(受信任的根权限)。


cd cert:

cd currentuser

cd root

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

现在我们调用两个证书:


Get-ChildItem | ? Subject -like '*DigiCert*'

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

还记得那个“吗?”是Where-Object 的别名:


Get-Alias -Definition Where-Object

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

这是上面显示的较短版本:


Get-ChildItem Cert:\CurrentUser\Root\ | ? Subject -like '*DigiCert*'

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

创建 PowerShell 驱动器(旁注)

PS Drives 的灵活性在新驱动器的创建中变得显而易见。


New-PSDrive -Name Data -PSProvider FileSystem -Root C:\Temp\Important\Data

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

这允许您直接通过 PowerShell Drive 访问子目录:


cd data:

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

如上所示,我使用了 PSProvider 文件系统。但还有更多。


Get-PSProvider

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

审查


New-PSDrive 使您能够创建新的 PowerShell 驱动器。该驱动器可以引用注册表项、别名、环境等等。 Get-PSProvider 显示所有 PowerShell 提供程序。


环境 PS 驱动器

所有环境变量都存储在 PowerShell Drive env 中:


Get-ChildItem env:

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

请记住,某些 cmd 命令在 PowerShell 中不起作用。

在 cmd 中,set logonserver 显示对客户端进行身份验证的 Active Directory 域控制器。

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

这在 PowerShell 中不起作用。

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

这是解决方案:PS Drive Env。

env PS Drive 使您能够显示登录服务器:


$env:LOGONSERVER

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

此外,还有一些有关它如何在 cmd 和 PowerShell 中工作的示例(我在同一会话中在 cmd 和 PowerShell 之间进行更改):

显示当前登录的用户


$env:username

set username

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

显示用户的主文件夹


$env:homepath

set homepath

[玩转系统] PowerShell 初学者(第 11 部分):享受 PowerShell 驱动器的乐趣

这部分就结束了。我希望我能够提供一个很好的概述并激励您继续关注。下一部分已经安排好了。

到目前为止我们学到了什么?


可以使用 Env PS Drive 访问环境变量。使用 $env: 并按 TAB 进行探索。


锻炼

这是下一部分的练习。

发现

了解如何使用 PS Drive 环境显示计算机名称。

创建

创建一个新的持久性 PowerShell 驱动器,该驱动器引用远程计算机上的共享文件夹。了解如何使该驱动器持久存在。 (使用在线帮助、本地帮助或其他)

下次主题见:PowerShell 初学者(第 12 部分):PowerShell 模块

Patrick Gruenauer,PowerShell MVP

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯