PowerShell 技能连载 - PowerShell 过滤器:使用 Where-Object 和 Select-Object

概述:Where-object 和 Select-object

在学习如何使用 Where-Object 和 Select-Object 命令之前,理解前几节讨论的概念是至关重要的。首先,PowerShell 是一种面向对象的编程语言。几乎每个命令都会返回一个具有多个特征的对象,这些特征可以独立检查和过滤。

例如,Get-Process 命令将返回有关当前运行中的 Windows 进程的各种信息,如启动时间和当前内存使用情况。每个信息都保存为 Process 对象的属性。通过管道字符 | ,PowerShell 命令也可以链接在一起。当您这样做时,在管道左侧命令的结果将发送到右侧命令中。如果您将 Get-Process 管道到 Stop-Process(即 Get-Process | Stop-Process),则由 Get-Process 命令识别出来的进程将被停止。如果没有设置筛选条件,则此操作会尝试停止系统上所有正在运行中的进程。

Where-object:语法、工作原理和示例

Where-object 命令可用于根据它们拥有任何属性来过滤对象。

1
2
3
4
5
6
7
PS C:\Users\dhrub> get-command Where-Object -Syntax

Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] [-EQ] [<CommonParameters>]

Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>] [<CommonParameters>]

Where-Object [-Property] <string> [[-Value] <Object>] -Match [-InputObject <psobject>] [<CommonParameters>]

最常用的语法是:

1
Where-Object {$_.PropertyName -ComparisonType FilterValue}

“PropertyName”属性是您正在过滤其属性的对象的名称。ComparisonType是描述您执行比较类型的简短关键字。“eq”代表等于,“gt”代表大于,“lt”代表小于,“like”代表通配符搜索。最后,FilterValue是与对象属性进行比较的值。Get-Process命令示例如下所示,并附有输出。

1
2
3
4
5
PS C:\Users\dhrub> get-process| Where-Object {$_.processname -eq "armsvc"}

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
124 8 1588 2800 4956 0 armsvc

Select-object: 语法、工作原理和示例

Select-Object 命令是另一个需要熟悉的命令。该命令用于限制或修改其他命令的输出。它有许多应用程序,但其中最常见的一种是选择另一个命令的前 N 个结果。

1
2
3
4
5
6
7
8
PS C:\Users\dhrub> Get-Command Select-Object -Syntax

Select-Object [[-Property] <Object[]>] [-InputObject <psobject>] [-ExcludeProperty <string[]>] [-ExpandProperty <string>] [-Unique] [-Last <int>] [-First <int>] [-Skip <int>] [-Wait]
[<CommonParameters>]

Select-Object [[-Property] <Object[]>] [-InputObject <psobject>] [-ExcludeProperty <string[]>] [-ExpandProperty <string>] [-Unique] [-SkipLast <int>] [<CommonParameters>]

Select-Object [-InputObject <psobject>] [-Unique] [-Wait] [-Index <int[]>] [<CommonParameters>]

以下是我们可以过滤进程的一种方式。

1
2
3
4
5
6
7
8
PS C:\Users\dhrub> get-process |select Name

Name
----
AdobeIPCBroker
amdfendrsr
AppHelperCap
ApplicationFrameHost

以下示例显示系统中正在运行的前五个进程。

1
2
3
4
5
6
7
8
9
PS C:\Users\dhrub> get-process |Select-Object -First 5

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
206 13 2428 10492 0.09 836 6 AdobeIPCBroker
110 8 2012 4612 3368 0 amdfendrsr
334 15 5692 9724 2284 0 AppHelperCap
394 22 15564 32088 0.30 13260 6 ApplicationFrameHost
124 8 1588 2800 4956 0 armsvc

以下示例显示系统中正在运行的最后五个进程。

1
2
3
4
5
6
7
8
9
PS C:\Users\dhrub> get-process |Select-Object -last 5

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1064 75 55192 2556 10.11 14596 6 WinStore.App
186 13 3380 8544 3856 0 WmiPrvSE
189 12 3900 11268 7532 0 WmiPrvSE
462 16 4900 8100 1288 0 WUDFHost
767 51 30048 17588 1.89 14588 6 YourPhone

结论

在PowerShell中,您可以通过使用Where-Object和Select-Object命令轻松控制正在处理的项目。 您可以使用这些命令来过滤您查看的数据或将操作限制为与您设置的筛选器匹配的操作(例如停止服务或删除文件)。 这个系列将在下一篇文章中结束。 我们将研究如何循环遍历对象组以对一组项目执行更复杂的任务。

PowerShell 技能连载 - 15个最佳的Active Directory Powershell脚本

我已经整理了一些最佳的Active Directory Powershell脚本,以下内容肯定会为您节省时间和工作。管理域是Active Directory的工作,了解每一个内容都是必须的。Active Directory包括用户、组,可以在Active Directory用户和计算机(ADUC)中进行检查。在域中创建用户或保留用户在域中是Windows管理员的工作。

当我工作多年时,我遇到过许多挑战作为Windows管理员有时候不容易在您的域内创建一组用户或组。这需要自动化以节省时间。如果您喜欢这个类别,还有其他类别可以探索。还有DNS powershell脚本、DHCP powershell脚本和我的自己的powershell存储库。

用于Active Directory的有用Powershell命令

获取域中的所有AD用户

1
Get-aduser -properties * -filter *

导入Active Directory模块

1
Import-module activedirectory

从域中获取所有计算机

1
Get-adcomputer -properties * -filter *

通过SAM账户名称禁用AD用户

1
Disable-ADaccount -identity "Name"

将数据导出为CSV格式

1
Get-adcomputer -properties * -filter * |export-csv "give path"

获取AD组的SAM账户名称

1
Get-ADgroup -identity "provide group name"

选择特定用户属性

1
Get-ADUser -properties * -filter *

获取域信息

1
Get-ADdomain

安装Active Directory角色

1
Install-WindowsFeature AD-Domain-Services

获取域控制器列表

1
Get-ADDomainController

AD用户恢复

从域控制器中恢复已删除的用户。在进行AD清理时,我们有时会删除AD用户,这给我们带来了许多问题。为满足需求提供解决方案如下。

工作原理

从域控制器中恢复已删除的用户。在进行AD清理时,我们有时会删除AD用户,这给我们带来了许多问题。为满足需求提供解决方案如下,在Active Directory Powershell脚本中。

可能的结果

运行此脚本后,在dsa.msc中搜索该用户应该可以找回而不丢失任何信息。此脚本非常实用,我希望使用它而不是通过GUI操作。

下载

您可以从以下链接下载脚本。

AD-User Recover

将服务器添加到域

将服务器添加到域、更改IP地址是一项艰巨任务,并且有时令人沮丧,那么为什么不自动化呢?该脚本无缝运行没有任何故障。这是活动目录Powershell脚本类别中很棒的一个。

工作原理

通常情况下,该脚本要求提供首选项1-6, 您想将哪个角色发送到另一个DC. 同样如果使用GUI执行,则是一项艰巨任务, 因此在PowerShell 中非常容易. 在这些脚本中, 如果转移成功,则会收到提示表示角色已成功转移.

可能的结果

运行此脚本后, 您将能够将角色从一个DC传输至另一个ad并进行检查. FSMO 角色非常重要,请务必小心操作。

下载

您可以通过以下链接下载脚本。

FSMO Role Transfer

在 AD 中禁用不活跃用户

禁用 AD 用户是一个月度活动,如果有很多用户,通过 GUI 执行可能会很困难。我为您带来了一段脚本,您可以通过 Powershell 批量禁用用户。

工作原理

该脚本将要求输入要禁用的用户标识,并提供一个包含用户信息的表格以进行批量操作,它将使用 Sam 账户进行识别。使用 Powershell 看起来很简单对吧?是的,这非常容易。

预期结果

运行此脚本后,您将能够从一个 DC 转移角色到另一个 ad 并且还可以检查。FSMO 角色非常重要,请务必小心操作。

下载

您可以从下面下载该脚本。

Disable Active directory User

不活跃用户报告

在审核过程中可能需要提供未使用系统或者已经有一段时间没有登录的用户列表,在这种情况下这个脚本就派上了用场并使得事情变得更加简单。

工作原理

该脚本获取那些已经有一定时间(比如 90 天)没有登录系统的人员名单,并发送邮件通知我们。请确保正确定义了 SMTP 设置以便接收邮件通知。

预期结果

该脚本将展示给你那些已经有指定时间内未登录系统的不活跃用户名单

下载

您可以从下面下载该脚本

AD-InActive Users Report-90 Days

获取 AD 计算机详细信息至 CSV 文件中

在审核过程中可能需要提供未使用系统或者已经有一段时间没有登录的计算机列表,在这种情况下这个脚本就派上了用场并使得事情变得更加简单。

如何运行

该程序会列出环境中计算机清单并导出到 csv 文件。

题外话

我们能够拿到包含计算机清单内容的 csv 文件。

下载

您可点击以下链接下载此文件。

AD computers to csv

启动 AD 回收站

当你不想丢失删除用户名信息时启动回收站是必须做的事情。启动回收站优势之处在于我们只需几次点击或执行命令即可轻松恢复任何用户名信息。

工作原理

这只是一组命令来启动回收站而无需通过 Windows 设置逐步点击鼠标。此程序易于操作且无任何问题地执行。

题外话

运行完毕后, 您可检查是否成功启动回收站也可查看输出显示内容.

下载

您可点击以下链接下载此文件.

Enable Recycle bin

删除 AD 对象

AD 对象既可以是计算机也可以是用户, 此程序为你提供删除环境中某个特定对象及其相关设备功能. 不再需要手工去 GUI 中删除对象.

工作原理

该脚本通常使用switch case,以便您可以在用户或计算机删除之间选择正确的选项,并删除选择并在结果屏幕上提供更新。

可能的结果

用户或计算机将从域中删除,并可以使用我已经在AD脚本部分中拥有的脚本进行恢复。

下载

您可以从以下链接下载脚本。

AD-object-deletion

创建多个AD组

一次性创建多个AD组。只需在CSV文件中提供详细信息,脚本将获取结果并创建所需的AD组。这是一个很方便查看的实用脚本之一。

工作原理

通常情况下,该脚本将从CSV文件中获取输入,并在定义的OU下创建所需的组。

可能的结果

无需手动检查即可创建AD组。只需提供所需详细信息即可。

下载

您可以从以下链接下载该脚本。

Create Multiple AD Groups

将AD用户详细信息提取到CSV文件中

提取AD用户详细信息是一个类似于审计过程每月都会执行的操作。了解关于用户每个详情对每个组织来说都很重要。这是一个简单的用于获取有关用户各种详情的脚本。

可能的结果

您可以通过检查最后登录日期和其他属性来确定是否需要进行任何清理。

下载

您可以从下面下载脚本。

AD user to csv

AD用户 - 成员 - 创建时间

这是一个在powershellgallery中由一位用户提出的问题,我已经创建了该脚本并要求他测试,结果很成功。

工作原理

此脚本将检查用户及其成员资格,并获取用户帐户创建日期。

可能的结果

您将能够了解用户属于哪个组以及用户在域中是何时创建的。

下载

您可以从下面下载脚本。

AD-when-created-memberof

上次设置密码日期

无法直接从PowerShell中获取上次设置密码日期,我们需要对脚本进行一些更改。如果尝试获取上次设置密码,则会显示1601年的日期。因此,我已经创建了一个用于获取给定samaccount的上次密码日期的脚本。

工作原理

该脚本将获取用户最后设置密码属性,并将其修改为正确的日期。可使用txt文档提供用户列表。

下载

您可以从下面下载脚本。

Last password set

OU 单个和批量创建

需要无需任何点击即可创建 OU,我已经为此创建了一个脚本,在其中您可以单独创建或批量创建 OU。

工作原理

在 Powershell 中,OU 创建是一个单一命令,但批量创建需要提供输入,这可以通过 CSV 或文本文件提供,并且在此脚本中完成相同操作。

可能的结果

如果操作正确,则您将能够在 dsa.msc 中看到已经创建的 OU。

下载

您可以从下面下载该脚本。

create OU

AD 用户删除 单个和批量

需要无需任何点击即可删除用户,我已经为此创建了一个脚本,在其中您可以单独删除用户或批量删除用户。

工作原理

用户删除 是 Powershell 中的一个单一命令,但进行批量删除 需要提供输入,这可以通过 CSV 或文本文件提供,并且在此脚本中完成相同操作。

可能的结果

如果操作正确,则你将不能 在 dsa.msc 中看到被删除的用户。

下载

您可以从下面下载脚本。

delete-user-account

AD 复制状态

想要了解域中 AD 的复制状态,这是最适合的脚本。它提供复制状态,如果有任何错误,则会显示相同的内容。

工作原理

它类似于 repadmin/replsum,在 HTML 格式中提供相同的结果。

可能的结果

如果您的域复制不一致,可以安排此脚本每小时运行,以便检查和故障排除。

下载

您可以从下面下载该脚本。

AD-Replication-status

过期对象报告

想要知道仍然存在于您域中的悬挂对象吗?那么这是一个很好的脚本,可获取并帮助完全创建这些对象。这是 Active Directory Powershell 脚本类别中最有趣的脚本之一。

工作原理

它将获取在指定时间范围内未被使用的悬挂对象。

可能的结果

如果符合搜索条件,您可以删除过期对象。

下载

您可以从下面下载该脚本。

Stale comp reports

添加或移除多个用户从多个组

想要知道仍然存在于你领域里但已经不存在了吗?那么这就是一个很好地能够找到并且帮助你完全创建新目标物体。

工作原理

它使用 csv 文件读取您的输入并在您的环境中执行,这是一个专门设计的脚本,可以智能地运行并完成您的工作。

可能结果

脚本运行后,可能结果是用户将被删除或添加到所需的安全组。如果您有疑问,请直接通过 Facebook 或 Gmail 与我联系,两者都在页脚中提到。

下载

您可以从以下链接下载该脚本。

Multiple user remove from groups

Add multiple user to multiple groups

从多台服务器获取 NTP 源

当我们遇到时间同步相关问题时,有时最好检查服务器取时间的来源。这是系统管理员需要进行的一般性练习。因此为此添加了一个脚本。

工作原理

它读取服务器列表的输入,并尝试从提供的列表中获取 NTP 源。

可能结果

它读取服务器列表的输入,并尝试从提供的列表中获取 NTP 源。

下载

您可以从下面下载脚本。

NTP Source

比较 AD 组

有时候当您需要比较两个 AD 组并找出其中缺失的一个时,情况可能会变得复杂,因为某些用户被添加到了特定组中。我创建了一个简单的脚本来节省时间,并与您分享。

工作原理

该脚本将比较提供的两个组,并显示这两个组之间缺少什么。如果值显示“==”,则表示用户在两个组中都存在;如果显示“=>”或“<=”,则意味着某些用户在其中一个组中缺失。

预期结果

使用该脚本,您将知道哪些用户缺失或哪些安全组缺失。

下载

您可以从下面下载脚本。

compare ad groups

镜像 AD 组

曾经想过将相似的用户添加到不同的组中,以便它们互为镜像吗?很容易通过 Powershell 实现,并且可以节省我们宝贵的时间。

工作原理

该脚本将从提供的两个 AD 组获取用户列表,如果目标 AD 组中缺少参考AD组成员,则会将该用户添加到目标组中。

预期结果

参考和目标AD群体都将具有相同成员。

下载

您可以从下面下载腳本.

Add missing AD group members

PowerShell 技能连载 - 管理 DNS 的 8 个最佳 Powershell 脚本

Active Directory 的另一个主要部分是 DNS。如果您是 Windows 服务器管理员,那么您很清楚它的工作原理,但在没有知道命令实际操作的情况下,使用 Powershell 进行管理和自动化有时会变得困难。

DNS 在组织中扮演着至关重要的角色,因此需要一些窥视来确保其正常运行。在我们领域中,通过 GUI 为服务器或工作站创建 DNS 记录似乎很容易,但当需要同时创建多个 DNS 记录时就会变得困难起来。从创建记录到将其指向正确的 IP 地址都具有挑战性。但我已经接受了这一挑战,并编写了一些相关脚本,并对其进行了优化以便无需任何混乱即可运行。如果您喜欢这部分内容,则肯定也会喜欢 DHCP powershell 脚本以及我的 powershell 脚本库。

好的开始意味着良好的结束,在下面是一些例子。从恢复 DNS 服务器到在 DNS 中创建区域,我都做到了。以下是一些书籍供您参考,如果您打算学习关于 DNS 或 powershell 的知识,请查阅以下最佳可用 DNS Powershell 脚本列表。

对于DNS有用的Powershell命令

添加DNS转发器

1
Add-DnsServerForwarder -IPAddress IP -PassThru

添加根提示服务器

1
Add-DnsServerRootHint -NameServer "domain.com" -IPAddress IP

获取DNS服务器配置

1
Get-DnsServer -ComputerName "IP"

获取DNS服务器转发器设置

1
Get-DnsServerForwarder

从DNS服务器中删除转发器

1
Remove-DnsServerForwarder -IPAddress IP -PassThru

设置DNS服务器配置

1
Get-DnsServer -CimSession IP | Set-DnsServer

清除 DNS 缓存

1
Clear-DnsServerCache -ComputerName "Name of server" -Force

恢复 DNS 区域

在 Powershell 中使用简单命令创建区域更加容易,无需转到 dnsmgmt.msc 创建新的所需区域。

工作原理

脚本将在备份文件夹中搜索备份,并搜索可以恢复的指定区域。

可能结果

如果您提供了所有正确信息,则 DNS 区域应该会通过最新备份恢复。

下载

您可以从以下链接下载脚本:

恢复 DNS 区域

创建主/辅助/存根区域

错误地删除了 DNS 区域?别担心,只要有 dns 区域的备份。这是一个非常方便的脚本来恢复 DNS 区域。

工作原理

只需提供将在所需服务器上创建辅助区域的区 IP 地址即可。

问题结果

主 / 辅助 / 存根区将在所需服务器上创建。

下载

您可以从以下链接下载脚本:

创建DNS转发器

在PowerShell中创建DNS转发器非常快速和简单。只需一行代码就可以摆脱繁琐的点击。

工作原理

提供批量或单个IP地址,并运行脚本,应该会创建DNS转发器,但请确保提供正确的IP地址。

可能的结果

该脚本将创建DNS转发器,应该可以ping通,并且请求应被重定向到转发器。

下载

您可以从以下链接下载脚本。

DNS 转发器

修改DNS记录

在PowerShell中创建DNS转发器非常快速和简单。只需一行代码就可以摆脱繁琐的点击。

工作原理

提供批量或单个IP地址,并运行脚本,应该会创建DNS转发器,但请确保提供正确的IP地址。

可能的结果

该脚本将创建DNS转发器,应该可以ping通,并且请求应被重定向到转发器。

下载

您可以从以下链接下载脚本。

修改主机记录 - 内部

创建多个 DNS 记录

是否曾经面对过搜索要更改 IP 的 DNS 记录挑战?PowerShell已经使这变得如此简便可靠。这个脚本是一个很好的例子。

工作原理

它将把主机名(hostname)的 IP 更改为所需 IP 地址。只需提供正确详细信息并查看其工作方式。

可能结果

如果一切顺利,则主机名 IP 应更换为新提供的 IP 地址。

下载

您可以从以下链接下载此脚本。

create-dns-record

检查多台主机 FQDN

假设有这样一种情况:你被要求在环境中提供多台主机 FQDN ,但你不知道其中有多少是工作组服务器“麻烦”,我专门为这种时刻编写了一个脚本, 以便不必逐个通过 nslookup 进行检查而实际上我们也能够为同样目标编写一个相同功能性质 的 脚步 。FQDN 看起来像 hostname.xyz.com 。

工作原理

它将使用 nslookup 并在短时间内提供多台服务器 FQDN 。

可能结果

如果它存在于您环境中,则会获取到 主机 FQDN ,如果不存在,则需要检查是否是工作组服务器或者列表中是否存在拼写错误。如果遇到任何问题,请随时联系我;如果需要视频演示,请告诉我. 您直接通过 Facebook 或 Gmail 联系我,在页尾都有我的邮箱.

下载

您可从下方链接下载此文件.

nslookup

PowerShell 技能连载 - PowerShell函数的手把手指南

为了在多个脚本中重复使用相同的代码,我们使用PowerShell函数。

PowerShell函数是一组已经被命名的PowerShell语句。每当我们想要运行一个函数时,我们需要输入它的名称。

函数可以像cmdlet一样具有参数。可以通过管道或命令行访问函数参数。
它们返回一个值,该值可以赋给变量或作为命令行参数或函数参数传递。为了指定返回值,我们可以使用关键字return

函数语法

以下是用于Function的语法。

1
2
3
4
5
6
7
8
function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]
{
param([type]$parameter1 [,[type]$parameter2])
dynamicparam {<statement list>}
begin {<statement list>}
process {<statement list>}
end {<statement list>}
}

以上语法中包括以下术语:

  1. 一个函数关键短语
  2. 您选择的名称
  3. 功能范围(可选)
  4. 可以有任意数量的命名参数。
  5. 一个或多个 PowerShell 命令被大括号括起来。

函数示例:

1
2
3
4
5
6
7
8
9
function Operation{
$num1 = 8
$num2 = 2
Write-Host "Multiply : $($num1*$num2)"
Write-Host "Addition : $($num1+$num2)"
Write-Host "Subtraction : $($num1-$num2)"
Write-Host "Divide : $($num1 / $num2)"
}
Operation

结果:

1
2
3
4
Multiply : 16
Addition : 10
Subtraction : 6
Divide : 4

函数范围

  • 在 PowerShell 中,函数存在于创建它的范围内。
  • 如果一个函数包含在脚本中,那么它只能在该脚本中的语句中使用。
  • 当我们在全局范围指定一个函数时,我们可以在其他函数、脚本和命令中使用它。

PowerShell 中的高级功能

高级功能是可以执行类似于 cmdlet 执行的操作的功能。当用户想要编写一个不必编写已编译 cmdlet 的函数时,他们可以使用这些功能。

使用已编译 cmdlet 和高级功能之间主要区别是已编译 cmdlet 是.NET Framework 类,必须用.NET Framework 语言编写。此外,高级功能是用 PowerShell 脚本语言编写的。

以下示例展示了如何使用 PowerShell 的高级功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function show-Message
{
[CmdletBinding()]
Param (
[ Parameter (Mandatory = $true)]

[string] $Name
)
Process
{
Write-Host ("Hi $Name !")
write-host $Name "today is $(Get-Date)"
}
}

show-message

结果:

1
2
3
4
5
cmdlet show-Message at command pipeline position 1
Supply values for the following parameters:
Name: Dhrub
Hi Dhrub !
Dhrub today is 09/01/2021 13:41:12

结论

我们在每种语言中都使用函数,通常会减少代码的行数。如果您的代码有1000行,那么借助函数的帮助,您可以将计数降至500。希望您喜欢这篇文章,我们下一篇文章再见。

PowerShell 技能连载 - 25个最佳的Powershell脚本仓库

我最喜欢的部分之一是创建略有不同的脚本,我在这方面也取得了成功,并创建了Powershell脚本存储库。今天我必须说,我已经记不清自己创建了多少个脚本。除了ADDNSDHCP之外,此存储库还包含许多其他必备的脚本。从GPO到DFS Powershell脚本以及许多其他相关的Powershell脚本,使我的工作团队体验达到第九云。

这些脚本显然是为自动化而创建的,并且将它们保留在手头上被认为是犯罪行为,因此展示在该类别中。虽然我们知道组策略在任何环境中设置规则时起着重要作用,并且DFS也很重要,那么为什么不通过查看下面推荐书籍来更深入地了解它们呢?

为您提供的有用PowerShell命令

获取所有组策略命令

1
Get-command -Module grouppolicy

获取 GPO 报告

1
Get-GPOReport -All -Domain xyz.com

重置 GPO

1
Restore-GPO -Name "GPOname" -Path \\Server1\Backups

备份 GPO

1
Backup-Gpo -All -Path \\Server1\GpoBackups

获取DFS复制组

1
Get-DfsReplicationGroup -GroupName RG02

获取DFS复制成员

1
Get-DfsrMember -GroupName "RG07" -ComputerName "SRV01"

重启多台计算机

1
Restart-computer -computername A,B,C

获取所有服务

1
Get-service

我的Powershell脚本仓库

PowerShell 技能连载 - 7 个用于管理 DHCP 的最佳 PowerShell 脚本

从DHCP范围获取IP看起来很容易,但当涉及检查每个范围的健康状况时,情况就变得非常困难了,无论是满还是是否需要创建任何超范围。如果您是服务器管理员,您真的知道我在说什么,当客户抱怨他们没有获得任何IP地址时确实很痛苦,并且你会发现在你的范围中一切都是空白。

使DHCP服务器或范围动态更新多个DHCP服务器上的DNS并不容易,并且知道它所处域中确切位置的范围更加艰难。通过Powershellguru,我的目标始终是为我在生产环境中通常遇到的问题提供简单解决方案。以下是一些关于DHCP及其工作原理以及Powershell相关书籍可以参考。希望您喜欢,并且大多数免费软件总是驻留在维基百科和微软网站上。

DHCP有用的Powershell命令

为DHCP服务器服务添加一个对象

1
Add-DhcpServerInDC -DnsName "dhcp.xyz.com"

备份 DHCP 数据库

1
Backup-DhcpServer -ComputerName "dhcp.xyz.com" -Path "%systemroot\dhcp\backup"

导出所有 DHCP 设置

1
Export-DhcpServer -ComputerName "dhcp.xyz.com" -File "path\config.xml"

获取范围内的所有活动租约

1
Get-DhcpServerv4Lease -ComputerName "dhcp.xyz.com" -ScopeId IP

按名称获取策略的属性

1
Get-DhcpServerv4Policy -ComputerName "dhcp.xyz.com" -Name "policyname"

DHCP故障转移

通常创建一个故障转移是更好的选择。所有请求不会只发送到一个特定的DHCP服务器,而是由2台服务器共同管理。

工作原理

此脚本将在两个DHCP服务器之间创建故障转移,我们需要指定范围。稍后,脚本将在这两个DHCP服务器之间创建故障转移。

可能的结果

运行脚本后,请检查故障转移是否正常工作。请求应该同时发送到两台服务器上。

下载

您可以从以下链接下载脚本。

DHCP Failover

DHCP备份

在您的环境中未配置故障转移时,备份DHCP是一个福音。您可以将备份恢复到上次备份的时间点,一切都会重新在线。

工作原理

路径已经设置好了,我们需要在dhcp服务器上运行脚本,这样就会创建一个dhcp的备份。

问题结果

该脚本减少了我们通过GUI手动操作的工作量,并在提供的位置创建了备份。

下载

您可以从下面下载脚本。

备份 DHCP 服务器

DNS 动态更新

IP地址动态分配是DHCP的角色之一,并不会自动启用,需要通过GUI手动完成。但为什么要匆忙去使用GUI呢?当你可以通过Powershell来做时。

工作原理

此脚本将根据需求为范围或所有范围启用DNS动态更新设置。

可能结果

动态更新将被启用,并且对于启用DHCP的机器主机解析将得到纠正。

下载

您可以通过突出显示的链接下载该脚本。

配置 DNS 动态更新

配置租约持续时间

按照微软公司规定,租约持续时间始终设定为8天。但实际情况下我们可能会针对范围进行更改,那么为什么要使用GUI进行操作呢?当我们可以编写一个脚本时。

工作原理

对于提供的范围,您可以使用此脚本设置租约持续时间。

可能的结果

将设置租约持续时间,如果需要,我们可以在任何计算机上进行测试,否则它将按预期工作。

下载

您可以通过突出显示的链接下载该脚本。

配置DHCP租约持续时间

DHCP健康检查

这是最实用的脚本之一,让我们了解范围、子网、是否禁用某个范围等。所有必备且可下载的独特脚本。

工作原理

脚本将扫描给定服务器的范围,并通过邮件发送结果。

可能的结果

我们将收到关于范围详情的信息,这对于了解其中任何一个即将填满的情况很重要。

下载

您可以通过突出显示的链接下载脚本。

DHCP健康检查

创建多个DHCP范围

如果需要创建多个DHCP范围,那么这个脚本就是为您量身定制的,请根据您的需求进行检查。

工作原理

它需要输入并且我们需要提供注释,以便快速创建范围。

可能的结果

所有提供的输入都将用于创建多个DHCP范围,这是一种非常方便实用的脚本。

下载

您可以通过突出显示的链接下载该脚本。

create scope

从多个范围获取路由器详细信息

曾经想过从多个范围中获取路由器IP详细信息吗?好吧,Powershell已经为我们创造了一个拯救生命般存在着这样一个脚本来完成此任务。

工作原理

使用 Get-DhcpServerv4Scope 在文本格式中提供范围ID详情,并且它会从给定范围中获取路由器IP地址。

可能结果

结果将以csv格式呈现,在其中包含有关路由器IP详细信息和其所属ID。

下载

您可以通过以下链接下载该脚本。

router

PowerShell 技能连载 - 针对Windows服务器的4种强大的PowerShell安全技术

简介

在不断发展的网络安全领域中,加固您的Windows服务器不仅是最佳实践,而且是必要的。PowerShell凭借其多功能性和自动化能力,在确保服务器安全的神奇旅程中成为我们可靠的魔杖。让我们讨论一下4种PowerShell安全技术,这将有助于实现我们的目标。

PowerShell安全性: 使用PowerShell进行审计

使用POSH-Sysmon配置Sysmon

Sysmon: 沉默的哨兵

由微软开发的Sysmon是一个强大的工具,用于监视系统并添加细粒度事件以便即使在重启后也能被跟踪。

这就像拥有一把神奇的放大镜,可以揭示服务器上隐藏的活动。

为什么使用POSH-Sysmon?

POSH-Sysmon是一个简化配置Sysmon 的PowerShell脚本。

它让您可以轻松地使用PowerShell创建和管理 Sysinternals Sysmon v2.0 配置文件。

通过Sysmon,您可以跟踪与进程创建、网络连接、注册表更改等相关的事件。

示例: 检测凭证提取尝试

要追踪最关键的事件之一——恶意进程尝试从内存中提取凭据时,

请使用 ProcessAccess 过滤器来检测Local Security Authority Subsystem Service (LSASS) 中此类尝试:

1
Get-WinEvent -LogName 'Microsoft-Windows-Sysmon/Operational' | Where-Object {$_.EventID -eq 10 -and $_.Message -like '*LSASS*'}

强化您的电子邮件堡垒:客户端规则转发阻止控制

为什么这很重要?

攻击者经常利用Office 365,在Outlook中设置静默规则,将敏感电子邮件转发到他们的账户。

通过启用客户端规则转发阻止控制来加强您的电子邮件安全性。

PowerShell操作:

使用PowerShell启用转发阻止:

1
Set-OrganizationConfig -RulesQuota 0

使用DSC进行PowerShell安全配置

什么是PowerShell DSC?

期望状态配置(DSC)就像一种魔法咒语,确保您的服务器保持安全配置。

它允许您定义和强制执行Windows服务器的期望状态。

示例:根据CIS基准进行安全配置

使用PowerShell DSC根据CIS Microsoft Windows Server 2019或Azure Secure Center Baseline for Windows Server 2016等基准应用安全配置。

您的DSC代码成为了您的护身符:

1
2
3
4
5
6
7
8
9
Configuration SecureServer {
Import-DscResource -ModuleName SecurityPolicyDsc
Node 'localhost' {
SecurityPolicy 'Audit - Audit account logon events' {
PolicySetting = 'Success,Failure'
}
# 更多安全设置在此处...
}
}

HardeningKitty:Windows配置的猫护卫

小猫在忙什么?

HardeningKitty,我们的猫友,会自动检查和评估Windows系统的硬化。

它还会检查像Microsoft Office和Microsoft Edge这样的单个应用程序。

PowerShell完美性:

运行HardeningKitty来评估您系统的安全姿态:

1
.\HardeningKitty.ps1 -AuditSystem

结论

通过使用PowerShell,我们施展了审计、保护和加固我们的Windows服务器。记住,安全是一个持续不断的追求 —— 让你的咒语锋利,让你的PowerShell脚本更加精湛!

PowerShell 技能连载 - 使用 PowerShell 自动化 Windows 11 任务:实用指南

您想通过自动化Windows 11系统上的各种任务来节省时间和精力吗?如果是这样,您应该学习如何使用PowerShell,这是一种强大的脚本语言和命令行工具,可以帮助您更快速、更轻松地完成任务。在本博客中,我们将向您展示如何使用PowerShell来自动化Windows 11上常见或复杂任务的一些实际示例,例如:

  • 使用PowerShell管理网络设置和连接
  • 使用PowerShell监视系统性能和资源
  • 使用PowerShell备份和恢复文件夹与文件
  • 使用PowerShell安装和更新Windows功能
  • 使用PowerShell创建并运行定时任务

使用 PowerShell 管理网络设置与连接

PowerShell 可以帮助您轻松高效地管理 Windows 11 系统上的网络设置与连接。您可以使用 PowerShell 执行各种操作,比如配置 IP 地址、DNS 服务器、防火墙、代理以及 VPN。 您还可以使用 PowerShell 测试网络连通性、ping 命令、traceroute 和解析主机名。

1
2
3
4
5
6
7
8
9
10
11
# 定义接口别名, IP 地址, 子网掩码, 网关 和 DNS 服务器
$interface = "Ethernet"
$ip = "192.168.1.100"
$subnet = "255.255.255.0"
$gateway = "192.168.1.1"
$dns = "8.8.8.8"

# 设置接口的IP地址, DNS服务器 和 防火墙配置文件
Set-NetIPAddress -InterfaceAlias $interface -IPAddress $ip -PrefixLength $subnet -DefaultGateway $gateway
Set-DnsClientServerAddress -InterfaceAlias $interface -ServerAddresses $dns
Set-NetFirewallProfile -Profile Private -Enabled True

使用 PowerShell 监控系统性能和资源

PowerShell 可以帮助您轻松高效地监控 Windows 11 系统的系统性能和资源。您可以使用 PowerShell 执行各种操作,如获取 CPU、内存、磁盘和网络使用情况,测量命令或脚本的执行时间和内存消耗,并生成性能报告和图表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# PowerShell script for monitoring system performance
# Define the performance counters for CPU and memory usage
$cpu = "\Processor(_Total)\% Processor Time"
$memory = "\Memory\Available MBytes"

# Get the performance counter data for CPU and memory usage
$data = Get-Counter -Counter $cpu,$memory -SampleInterval 1 -MaxSamples 10

# Create a chart object from the performance counter data
$chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$chart.Width = 800
$chart.Height = 600
$chart.BackColor = "White"

# Add a chart area, a series for CPU usage, a series for memory usage, and a legend to the chart object
$area = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$area.AxisX.Title = "Time (seconds)"
$area.AxisY.Title = "Usage (%)"
$area.AxisY2.Title = "Available (MB)"
$chart.ChartAreas.Add($area)

$series1 = New-Object System.Windows.Forms.DataVisualization.Charting.Series
$series1.Name = "CPU"
$series1.ChartType = "Line"
$series1.Color = "Red"
$series1.BorderWidth = 3
$series1.Points.DataBindXY($data.Timestamps,$data.CounterSamples[0].CookedValue)
$chart.Series.Add($series1)

$series2 = New-Object System.Windows.Forms.DataVisualization.Charting.Series
$series2.Name = "Memory"
$series2.ChartType = "Line"
$series2.Color = "Blue"
$series2.BorderWidth = 3
$series2.YAxisType = "Secondary"
$series2.Points.DataBindXY($data.Timestamps,$data.CounterSamples[1].CookedValue)
$chart.Series.Add($series2)

$legend = New-Object System.Windows.Forms.DataVisualization.Charting.Legend
$legend.Docking = "Top"
$chart.Legends.Add($legend)

# Save the chart object as an image file
$chart.SaveImage("C:\Performance.png","png")

使用 PowerShell 备份和恢复文件夹

PowerShell 可以帮助您轻松高效地备份和恢复 Windows 11 系统中的文件夹。您可以使用 PowerShell 执行各种操作,如创建、复制、移动、重命名、删除、搜索和压缩文件夹。您还可以使用 PowerShell 创建和使用备份策略、备份集和备份项。

1
2
3
4
5
6
7
8
9
10
11
12
13
# PowerShell script for backing up and restoring files and folders
# Define the folder to backup and the backup location
$folder = "C:\Users\YourName\Documents"
$location = "D:\Backup"

# Create a backup policy that runs daily and keeps backups for 30 days
$policy = New-BackupPolicy -Frequency Daily -RetentionPeriod 30

# Set the backup policy for the computer
Set-BackupPolicy -Policy $policy

# Backup the folder to the backup location
Backup-File -Source $folder -Destination $location

Here is a summary of a PowerShell script that restores a file or folder from a backup to a specified location:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Define the file or folder to restore and the restore location
$file = "C:\Users\YourName\Documents\Report.docx"
$location = "C:\Users\YourName\Desktop"

# Get the latest backup set that contains the file or folder
$set = Get-BackupSet | Sort-Object -Property CreationTime -Descending | Select-Object -First 1

# Get the backup item that matches the file or folder
$item = Get-BackupItem -BackupSet $set -Path $file

# Restore the file or folder to the restore location
Restore-File -BackupItem $item -Destination $location

使用 PowerShell 安装和更新 Windows 功能

PowerShell 可以帮助您轻松高效地在 Windows 11 系统上安装和更新 Windows 功能。您可以使用 PowerShell 执行各种操作,如列出、启用、禁用或更新诸如 Hyper-V、Windows 子系统 for Linux 或 Windows 沙盒等 Windows 功能。

1
2
3
# 用于安装和更新 Windows 功能的 PowerShell 脚本
# 在计算机上安装 Hyper-V 功能
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

以下是一个概要说明了一个 PowerShell 脚本,该脚本从计算机中卸载了 Windows 子系统 for Linux 功能并移除相关文件:

1
2
# 从计算机中卸载 Windows 子系统 for Linux 功能
Uninstall-WindowsFeature -Name Microsoft-Windows-Subsystem-Linux -Remove

使用 PowerShell 创建和运行定时任务

PowerShell 可以帮助您轻松高效地在 Windows 11 系统上创建和运行定时任务。您可以使用 PowerShell 执行各种操作,如创建、注册、启动、停止或禁用定时任务,例如运行一个 PowerShell 脚本、发送电子邮件或显示消息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 用于创建和运行定时任务的 PowerShell 脚本
# 定义要运行的 PowerShell 脚本
$script = "C:\Scripts\Backup.ps1"

# 创建一个新的定时任务动作来运行这个 PowerShell 脚本
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File $script"

# 创建一个新的触发器,在每天早上10点执行该任务
$trigger = New-ScheduledTaskTrigger -Daily -At 10am

# 创建一组新的设置,如果任务执行时间过长则停止该任务
$setting = New-ScheduledTaskSettingSet -ExecutionTimeLimit (New-TimeSpan -Minutes 30)

# 在计算机上注册这个新的定时任务,并指定名称、动作、触发器及设置
Register-ScheduledTask –Name "Backup" –Action $action –Trigger $trigger –Setting $setting

结论

PowerShell 是一款多才多艺且强大的工具,可帮助您自动化处理在Windows 11系统上进行各种操作。您可以在官方PowerShell文档中找到更多关于PowerShell 的信息和示例。感谢阅读此篇博客文章。希望对你有所帮助并且有趣。 😊

PowerShell 技能连载 - PowerCLI:管理VMware的简便方法

简介

踏上穿越 VMware 虚拟景观的迷人旅程可能是一项艰巨的任务。别害怕,亲爱的管理员们,PowerCLI 将改变您的 VMware 管理体验。作为多年来在这些虚拟领域中航行过的人,我将引导您了解 PowerShell 的复杂之处。

使用 PowerCLI 入门

安装 PowerShell 模块

在深入研究 PowerCLI 魔法之前,请确保已安装必要的模块。对于 VMware 管理,您需要安装 VMware PowerCLI 模块。使用以下 PowerShell 命令进行安装:

Install-Module -Name VMware.PowerCLI -Force -AllowClobber

来源: PowerShell Gallery (powershellgallery.com)

此命令获取并安装 VMware PowerCLI 模块,这是管理虚拟环境所需的先决条件。

连接到您的 VMware 环境

一旦模块被安装,您可以使用以下命令连接到您的 VMware 环境:

Connect-VIServer -Server YourVMwareServer -User YourUsername -Password YourPassword

来源: VMware PowerCLI 文档 (code.vmware.com)

用实际服务器详细信息替换 “YourVMwareServer,” “YourUsername,” 和 “YourPassword” 。这将建立与您的 VMware 环境之间的连接。

PowerCLI:虚拟管理的交响乐

VM概览的基本命令

让我们从微软官方 PowerShell 文档中提取的一个基本命令开始:

1
Get-VM

来源: 微软 PowerShell 文档 (docs.microsoft.com)

这个一行代码可以直接从 PowerShell 的圣典中为您提供 VMware 环境中所有虚拟机的全面列表。

使用 Where-Object 进行结果细化

有时,您只需要特定信息。PowerShell 可以帮到你!使用 Where-Object 命令来过滤结果。例如,让我们找出具有超过 4 GB RAM 的 VM:

Get-VM | Where-Object {$_.MemoryGB -gt 4}

来源: PowerShell.org 社区论坛 (powershell.org)

这段代码可帮助您识别具有超过 4 GB RAM 的 VM,这是从 PowerShell 社区汲取的智慧之源。

快照简化处理

管理快照至关重要,而 VMware 官方文档提供了一个珍贵建议:

Get-VM "YourVMName" | New-Snapshot -Name "SnapshotName" -Description "SnapshotDescription"

来源: VMware PowerCLI 文档 (code.vmware.com)

在此处,我们创建了一个带名称和描述的快照,遵循了 VMware 最佳实践。

使用 Set-VM 进行动态资源管理

调整 VM 资源是一个强大功能,并且来自 VMware 的文档帮助我们掌握这种力量:

Set-VM -Name "YourVMName" -MemoryGB 8 -NumCPU 2

来源: VMware PowerCLI 文档 (code.vmware.com)

这个一行代码展示了在 VMware 中使用 PowerShell CLI 实现无缝资源管理能力。

使用 Invoke-VMScript 在 VM 内运行命令

要在 VM 内部执行命令,请参考 VMware 知识库:

Invoke-VMScript -VM "YourVMName" -ScriptText "YourScript" -GuestCredential (Get-Credential)

此片段使您可以安全地在 VM 中运行脚本或命令。

结论

当您开始使用PowerCLI在VMware中进行这段神奇的旅程时,请记住每个命令都是您虚拟魔法书中的一个咒语。本指南取自权威来源,只是您PowerShell冒险之旅的开端。定制、实验,并让魔法流淌在您的虚拟领域中。您的VMware管理即将变得不仅高效,而且真正迷人。祝编写脚本愉快!

PowerShell 技能连载 - 轻松掌握PowerShell中的ErrorAction

PowerShell 是一种强大的脚本语言,允许用户轻松自动化任务和管理系统。PowerShell 的一个关键特性是 ErrorAction 参数,它允许用户控制脚本或命令中如何处理错误。

理解 PowerShell 中的 ErrorAction

ErrorAction 是一个参数,可用于任何 PowerShell 命令或脚本块,用于指定如何处理错误。可以为 ErrorAction 参数分配几个值,例如 Continue、SilentlyContinue、Stop 和 Inquire。

示例:使用 ErrorAction

在 PowerShell 中,-ErrorAction 参数允许您指定如何处理特定命令或脚本的错误。您可以使用此参数与多个可能值,包括 ContinueSilentlyContinueStopInquire。以下是如何使用这些值的示例:

  1. Continue: 此选项告诉 PowerShell 在发生错误时继续执行脚本或命令,并显示错误消息后继续执行剩余代码。
1
Get-ChildItem -Path “C:\\NonexistentFolder” -ErrorAction Continue**
  1. SilentlyContinue: 此选项告诉 PowerShell 抑制错误消息并继续执行脚本或命令。不会显示错误消息。
1
Get-Item -Path “C:\\NonexistentFile” -ErrorAction SilentlyContinue**
  1. Stop: 此选项告诉 PowerShell 如果发生错误,则停止执行脚本或命令。它将终止该脚本并显示错误消息。
1
Remove-Item -Path “C:\\ImportantFile” -ErrorAction Stop**
  1. Inquire:这个选项与其他选项有些不同。当发生错误时,它会提示用户输入,让他们决定是继续执行还是停止。通常与trycatch块一起用于交互式错误处理。

请注意,这些错误操作的实际行为可能会因您使用的特定 cmdlet 或脚本而异,因为并非所有 cmdlet 都支持所有错误操作首选项。但根据您的需求,在 PowerShell 中处理错误的常见方法如下。

使用 ErrorAction 的最佳实践

在使用 ErrorAction 参数时,请记住以下一些最佳实践:

  • 始终明确指定 ErrorAction 参数以确保一致的错误处理。
  • 如果要确保捕获并显示任何错误,请考虑使用 Stop 值。
  • 使用 Try-Catch-Finally 结构来处理特定错误并执行清理操作。

结论

ErrorAction 参数是 PowerShell 中一个强大的工具,允许用户控制如何处理错误。通过了解如何使用此参数并遵循最佳实践,您可以编写更健壮和可靠的脚本。所以,在下次在 PowerShell 脚本中遇到错误时,请记得利用 ErrorAction 参数来优雅地处理它!