PowerShell 技能连载 - 列出所有域控制器

要快速获取所有域控制器的列表,请运行以下命令:

1
Get-AdDomainController -Filter * | Select-Object -Property Name, Domain, Forest, IPv4Address, Site | Export-Csv -Path $env:temp\report.csv -UseCulture -NoTypeInformation -Encoding Default

当然,您需要登录到域,并且需要访问 “ActiveDirectory” PowerShell 模块。

该命令会在您的临时文件夹中创建一个 CSV 文件,可用 Excel 打开。只需双击所创建的 CSV 文件即可。”-UseCulture“ 确保 CSV 使用正确的分隔符以便 Excel 打开它。

PowerShell 技能连载 - 彻底删除硬盘数据

当您在硬盘驱动器或USB闪存等存储介质上删除文件时,如您所知,数据并不会立即被删除。相反,数据只是未分配的,并将根据需要被新数据覆盖。在此之前,任何人都可以恢复已删除的数据。

为了防止对已删除的数据进行访问,在 Windows 上可以使用内置工具 cipher.exe 显式地覆盖所有未分配的存储空间。当您这样做时,您会立即意识到为什么默认情况下不这样做:即使是所有零位的数据也需要很长时间才能存储到介质中。

该命令将三次覆盖 C:\ 驱动器上未分配的存储空间,首先用 “0”、然后用 “1”,最后用随机值。可能需要一个晚上才能完成这个任务:

1
cipher /w:C:\

以下是我们示例中使用的 “/w“ 开关的官方描述:“从整个卷中可用未使用磁盘空间中移除数据。如果选择此选项,则忽略所有其他选项。指定目录可以位于本地卷中任何位置。如果它是一个挂载点或指向另一个卷中目录,则将删除该卷上的数据。

PowerShell 技能连载 - 列出所有域控制器

要快速获取所有域控制器的列表,请运行以下命令:

1
Get-AdDomainController -Filter * | Select-Object -Property Name, Domain, Forest, IPv4Address, Site | Export-Csv -Path $env:temp\report.csv -UseCulture -NoTypeInformation -Encoding Default

当然,您需要登录到域,并且需要访问“ActiveDirectory” PowerShell 模块。

该命令会在您的临时文件夹中创建一个 CSV 文件,可用 Excel 打开。只需双击创建的 CSV 文件即可。“-UseCulture”确保CSV使用正确的分隔符以便 Excel 打开它。

PowerShell 技能连载 - 永久删除硬盘内容

当您在硬盘驱动器或USB闪存等存储介质上删除文件时,如您所知,数据并不会立即被删除。相反,数据只是未分配的,并将根据需要被新数据覆盖。在此之前,任何人都可以恢复已删除的数据。

为了防止对已删除的数据进行访问,在Windows上可以使用内置工具 cipher.exe 显式地覆盖所有未分配的存储空间。当您这样做时,您会立即意识到为什么默认情况下不这样做:即使是所有零位数也需要很长时间才能将数据存储到介质中。

该命令三次覆盖C:\驱动器上未分配的存储空间,首先用“0”、然后用“1”,最后用随机值。你最好投入一晚完成这个任务:

1
cipher /w:C:\

以下是我们示例中使用的“/w”开关的官方描述:“从整个卷中可用未使用磁盘空间中移除数据。如果选择此选项,则忽略所有其他选项。指定目录可以位于本地卷中任何位置。如果它是一个挂载点或指向另一个卷中目录,则将删除该卷上的数据。

PowerShell 技能连载 - Office365邮箱恢复删除(第 2 部分)

假设有人离开了公司,您删除了其Office365用户帐户。事实证明,这也会删除附加的邮箱。如果您想将此邮箱附加到其他人身上,即仍然能够访问重要的公司或客户数据,则可以按照以下步骤操作。

首先,请检查邮箱是否已“软删除”并且仍然可以恢复:

1
Get-Mailbox -SoftDeletedMailbox | Select-Object Name,ExchangeGUID

此列表中每个可恢复的邮箱都具有唯一的GUID。要将此邮箱附加到其他人身上,还需要找出要将已删除的邮箱附加到其中的仍处于活动状态的邮箱的GUID:

1
$liveMailbox = Get-Mailbox existingPerson@somecompany.onmicrosoft.com | Select-Object Name,ExchangeGUID

接下来,在获取两个GUID后,发出请求以将旧邮件箱数据连接到新邮件箱,并指定目标根文件夹(例如“旧邮件内容”)。这将是新邮件箱显示在其下面的电子邮件文件夹:

1
New-MailboxRestoreRequest -SourceMailbox [ENTER_GUID_OF_SOFTDELETED_MAILBOX] -TargetMailbox $liveMailbox.ExchangeGUID -AllowLegacyDNMismatch -TargetRootFolder "Old Mailbox Content

PowerShell 技能连载 - Office365邮箱恢复删除(第 1 部分)

如果您已删除 Office365 用户帐户,但后来意识到仍需要其邮箱中的数据,则可能可以恢复该邮箱。

首先,请检查邮箱是否已“软删除”。下一个命令列出了所有可恢复的邮箱:

1
Get-Mailbox -SoftDeletedMailbox | Select UserPrincipalName, WhenSoftDeleted

每个邮箱都与用户主体名称相关联。要取消删除邮箱,您需要临时重新创建此帐户。接下来,您可以撤消邮件箱的删除操作。只需在以下命令中替换主体名称即可:

1
Undo-SoftDeletedMailbox -SoftDeletedObject username@company.onmicrosoft.com

PowerShell 技能连载 - 重命名属性(简单方法)

Select-Object 不仅可以选择属性,还可以重命名。假设您需要获取一个文件夹中的文件列表,并包含文件大小信息,这行代码就足够了:

1
2
PS> Get-ChildItem -Path c:\windows -File | Select-Object -Property Length, FullName
}

现在你只能看到两个选定的属性“Length”和“FullName”。但是如果您希望此信息以不同的名称显示,例如“Size”和“Path”,该怎么办?

只需通过提交每个属性的哈希表来重命名属性。在每个哈希表内,使用“Name”键来重命名属性,“Expression = '[OriginalPropertyName]' }”键保持原始属性内容不变:

1
Get-ChildItem -Path c:\windows -File | Select-Object -Property @{Name='Size';Expression='Length'}, @{Name='Path';Expression='FullName'}

这样,您可以轻松地重命名任何对象中的任何属性。

PowerShell 技能连载 - 常见陷阱和奇怪结果:比较运算符

你能发现下面代码中的错误吗?

1
2
3
4
5
6
7
8
9
10
$result = 'NO'

if ($result = 'YES')
{
'Result: YES'
}
else
{
'Result: NO'
}

无论 $result 包含“NO”还是“YES”,它总是返回“Result: YES”。

从其他脚本或编程语言转换到 PowerShell 的人经常遇到这个错误:在 PowerShell 中,“=”是一个独占赋值运算符,而对于比较,您需要使用“-eq”。因此,正确的代码(和简单的修复)应该是这样的:

1
2
3
4
5
6
7
8
9
10
$result = 'NO'

if ($result -eq 'YES')
{
'Result: YES'
}
else
{
'Result: NO'
}

让我们看一下为什么最初的代码总是返回“Result: YES”。

当您意外使用赋值运算符而不是比较运算符时,您将不会得到任何结果,因此这个 NULL 值应该真正评估为 $false,并且条件应该始终返回“Result: NO”。然而,情况恰恰相反。

这是由于另一个PowerShell鲜为人知的怪异之处:当您分配一个值并将分配放在大括号中时,分配也将被返回。最初错误的代码将使用实际响应于赋值值的条件。

每当您向$result(所有都被解释为FALSE)分配0、’’、$false 或 $null 时,代码都会返回“Result: NO”。任何其他赋值都会返回“Result: YES”。

所有这些令人困惑的行为只是因为用户肌肉记忆使用了操作符“=”而实际上需要“-eq”操作符。

PowerShell 技能连载 - PowerShell 废弃功能(第 2 部分:Exchange Online 中的远程 PowerShell (RPS))

Exchange Online 中的 PowerShell cmdlet 使用“远程 PowerShell”作为远程技术,这是一种在今天世界中存在安全风险的传统技术。这就是为什么 Exchange 团队最初考虑在2023年6月停用 Remote PowerShell。

由于相当多的用户似乎无法切换到新的、更安全的基于 REST 的 v3 PowerShell 模块来管理 Exchange,团队决定添加一种方法让客户重新启用 Remote PowerShell 以延长宽限期(至少适用于 Microsoft 云租户)。

简而言之:如果您仍在使用 Exchange Online 中的 Remote PowerShell,则需要开始计划过渡到基于 REST 的 v3 PowerShell 模块。

PowerShell 技能连载 - PowerShell 废弃功能 (第 1 部分:PowerShell 2.0)

Windows PowerShell 2.0 仍然是任何 Windows PowerShell 的一部分,用于向后兼容。当启用时,它是一个严重的安全风险 - PowerShell 2.0 简单地没有 PowerShell 5 及更高版本中发现的所有先进恶意软件检测工具。

如果您拥有管理员权限,则此行将告诉您系统上是否启用了 PowerShell 2.0:

1
PS> Get-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2

如果它已启用,请确保将其禁用。