用 PowerShell 查看安装的 .NET 框架
以下 PowerShell 代码最高支持 .NET 4.7 版本:
1 | Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse | |
参考:
以下 PowerShell 代码最高支持 .NET 4.7 版本:
1 | Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse | |
参考:
PowerShell 提供很多种方式来连接到 SMB 文件共享。以下是三种不同的方法:
1 | # adjust path to point to your file share |
Net.exe 是最多功能的方法,在 PowerShell 的所有版本中都有效。通过传入一个 “*”,它自动选择下一个有效的驱动器盘符。
New-PSDrive
从 PowerShell 3 起支持 SMB 共享。New-SmbMapping
需要 SmbShare 模块并且现在看来有点古怪:重启后才能在 Windows Explorer 中显示该驱动器。
要安全地删除文件、文件夹,或整个驱动器,PowerShell 可以使用内置的 cipher.exe 工具。这行代码可以安全地删除旧的用户配置文件:
1 | Cipher.exe /w:c:\Users\ObsoleteUser |
请注意要删除的文件夹路径和参数 /w 之间需要用一个 :
分隔。删除数据需要消耗一定时间:Windows 要多次覆盖整个数据内容,以确保它不可恢复。
(来自 Microsoft 免费的 RSAT 工具的)Get-OrganizationalUnit
可以基于识别名或 GUID 来搜索 OU,或者可以使用 -Filter
参数。
不幸的是,-Filter
不能方便地自动化。以下代码并不能工作,并不能返回所有名字中包含 “Test” 的 OU:
1 | $Name = 'Test' |
这个结果很令人惊讶,因为以下这行代码可以工作(前提是您确实有名字包含 “Test” 的 OU):
1 | Get-ADOrganizationalUnit -Filter { Name -like "*Test*" } |
通常情况下,如果您想用简单的通配符来搜索,那么使用简单的 LDAP 过滤器十分管用。以下代码查找所有名字中包含 “Test” 的 OU:
1 | $Name = 'Test' |
假设您已安装了免费的 Microsoft RSAT 工具,以下是一个简单的方法来检测一个 OU 是否存在:
1 | $OUPath = 'OU=TestOU,DC=train,DC=powershell,DC=local' |
$exits
的值将是 $true
或 $false
,表示是否找到该 OU。请注意使用 try/catch 处理错误的方法:Get-ADOrganizationalUnit
将在指定的 OU 不存在时抛出终止错误,所以需要 try/catch 来捕获这些错误。
变量和函数参数可以通过验证属性自动地验证有效性。以下是一个简单的例子,确保 $test1
只能存储 1-10 之间的值:
1 | [ValidateRange(1,10)]$test1 = 10 |
当您将一个小于 1 或大于 10 的值赋给这个变量,PowerShell 将会抛出一个异常。不过通过这种方式您无法控制异常的问本。
通过使用脚本验证器,您可以选择自己希望的错误信息:
1 | [ValidateScript({ |
以下是输出结果:
1 | PS C:\> $test2 = 4 |
从 Windows Server 2012 开市,您可以快速地导出和重新导入 DHCP 设置。克隆或迁移 DHCP 服务器是通过快照的形式。以下的例子从 \ORIGDHCP 导出设置并导入本地的 DHCP 服务器中:
1 | Export-DHCPServer -File "$env:temp\dhcpsettings.xml" -Computername ORIGDHCP |
免费的 Microsoft RSAT 工具给我们带来了 “ActiveDirectory” PowerShell module:许多 cmdlet 可以帮助您管理 Active Directory 用户和计算机。
一个 cmdlet 特别有用。与其使用 Get-ADUser
和复杂得过滤器来查找 AD 用户,我们可以使用更方便的 Search-ADAccount
。它注重于某些公共场景的查找用户功能。例如这行代码可以找出所有 120 天未活跃的用户账户:
1 | Search-ADAccount -AccountInactive -TimeSpan 120 -UsersOnly |
以下是一个非常简单的创建复杂随机密码的方法:
1 | Add-Type -AssemblyName System.Web |
The API call lets you choose the length of the password, and the number of non-alphanumeric characters it contains.
在前一个技能当中我们解释了 ToString()
描述一个对象的方法是含糊的,而且对象的作者可以决定 ToString()
返回什么。这在 PowerShell 代码中尤为明显。请看要覆盖任意一个对象的 ToString()
方法是多么容易:
1 | PS> $a = 1 |