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

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

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

PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)


在 PowerShell 初学者(第 7 部分):管道(以及许多可供使用的示例)部分之后,我们现在将重点关注对象。您可以构建的基础知识。但在这之前我们先看一下上一个练习的答案。我们还将在第 7 部分中快速回顾一下迄今为止所学到的内容。

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

回顾(第 7 部分)

运行 Get-Hotfix。仅以列表格式显示修补程序的数量 (KB) 和安装日期。

这是第 7 部分的练习。好的,我们必须运行 Get-Hotfix。然后我们必须将输出格式化为列表格式并仅显示两件事。名称和安装日期。为此我们需要管道。

让我们一步一步来做。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

当您在不带任何参数的情况下运行 Get-Hotfix 时,您可以看到标头名称(我们将其称为对象属性,下面将详细介绍这一点)。现在我们有了名字。使用管道可以很容易地将其放入更复杂的命令中。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

我们到了。

审查


管道获取管道左侧的所有内容并将其转发到管道右侧的命令。 Format-Table、Format-List 和 Format-Wide 调整命令的输出。


感受基于对象的 PowerShell 的强大功能

PowerShell 是面向对象的。这意味着什么以及这会带来什么?好吧,在面向对象的环境中,有人已经为你做了一些事情。真是个好人。那是谁?我不知道。肯定是微软的开发者,或者更确切地说是几个。 ?

我无法比《Windows PowerShell in Action》(第二版)的作者 Bruce Payette 说得更好:

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

您使用其他人为您定义的对象。

重点是什么?让我举一个例子。你当然知道 ipconfig,它是一个显示你的 IP 设置的命令。 Ipconfig 输出纯文本。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

到目前为止,一切都很好。如果您只想显示 IPv4 地址怎么办?是的,我听到你大声喊道:“这是可能的,使用 find”。好的,让我们一起做。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

现在假设我们只需要表格格式的 IPv4 地址和 IPv6 地址。现在事情变得非常复杂。从文本输出中输出或调用单个项目需要付出巨大的努力。

好的,与 ipconfig 等效的命令是 Get-NetIPAddress。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

现在看看这个:

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

第二个更甜。让我再举一个例子:cmd 中的 dir 和 PowerShell 中的 Get-ChildItem。

Dir(如果在 cmd 中输入)输出纯文本。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

Get-ChildItem 输出对象。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

附注:如果您在 PowerShell 中运行 dir,则会执行 Get-ChildItem。这可能有点令人困惑。

这是对即将到来的主题的一个小尝试。 Get-ChilIdtem 和操作中的对象。


Get-ChildItem -File C:\Temp | Select-Object Name,LastWriteTime,CreationTime,Directory,Length

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

现在我们将深入研究 PowerShell 对象。

发现某人已经为您定义的事物(获取成员、选择对象)

我们将继续关注上面的例子。我已经执行了命令


Get-ChildItem -File C:\Temp | Select-Object Name,LastWriteTime,CreationTime,Directory,Length

现在让我们看一下 Get-ChildItem 的“正常”输出。它显示模式、上次写入时间、长度和名称。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

我怎么知道还有更多? (创建时间,目录)?

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

我提前查看了 Get-Member 命令发生了什么。


Get-ChildItem | Get-Member

在那里我发现了两个属性:

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

然后我就简单地使用这个属性。

Get-Member cmdlet 获取对象的属性和方法。


PowerShell 的强大之处在于面向对象。这就是 PowerShell 与许多其他工具的区别。你必须处理对象。否则你永远不会意识到PowerShell的强大。

使用 Get-Member 探索对象。


什么是属性和方法?

属性和方法简介 (Get-Member)

我已经提到过还有更多。我们可以使用 PowerShell 执行更多操作,然后再执行简单的运行命令。 PowerShell 是面向对象的。有属性和方法。我们先来看看属性。好的,让我强调一下我们现在正在做的事情的重要性。我声称:如果你不熟悉对象,你甚至没有机会理解帮助。你不相信我?

Get-Date 是一个简单的命令。但是如果你看一下示例,你会发现一个示例已经在处理对象了……如果你运行 Get-Help Get-Date -Online 并滚动到示例 4 和 5,你不明白那里发生了什么那么你就有麻烦了。


Get-Help Get-Date -Online

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

这是什么意思呢?点的含义是什么?括号是什么?我如何知道该看哪里?

如果你连帮助都不懂,你怎么能成为一名优秀的 PowerShell 人员呢?我希望我稍微激怒了你。 ? 好的,我们开始吧。

我们区分属性和方法。

属性 - 对象是什么

属性向您展示了对象是什么。一个对象可以是绿色的,它可以是日期,它可以是真或假或其他东西。

我们以 Get-Volume 为例。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

Get-Member 显示 Get-Volume 命令的所有属性。而且你必须使用管道。


Get-Volume | Get-Member -MemberType Properties

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

现在我们可以调用这些属性了。执行此操作的最佳方法是使用 Select-Object。假设我们要显示驱动器号、大小和剩余大小。顺便说一句:不要忘记使用 TAB。


Get-Volume | Select-Object DriveLetter,Size,SizeRemaining

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

另一个例子。您的网卡的连接速度是多少?


Get-NetAdapter | Get-Member -MemberType property

您会找到一个属性 LinkSpeed。


Get-NetAdapter | Select-Object LinkSpeed

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

好吧,我们就到此为止吧。我们需要这个做什么?一个例子。您想要将所有文件名保存在一个文件中。为此,我们需要所有文件名的列表,并且仅需要名称。只有名字!我们如何获得所有的名字?第1步是找出文件名的属性。


Get-ChildItem C:\Temp | Get-Member -MemberType property

您将找到一个名为 FullName 的属性。我们到了。


Get-ChildItem -Path C:\Temp\ | Select-Object FullName

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

并将其保存到文件中...


Get-ChildItem C:\Temp\ | Select-Object FullName | Out-File C:\Temp\test.txt

对于这一部分,唯一重要的是您要记住存在属性并且可以使用 Get-member 显示它们。

强调本主题的重要性:了解对象如何发挥作用。普通 PowerShell 用户和优秀 PowerShell 用户之间的区别。

假设您的老板想要获得您域中所有服务器的列表。我们现在应该做什么?截屏?购买第三方工具?不必要。使用 PowerShell。


Get-ADComputer -Filter {operatingsystem -like '*server*'} | Select-Object Name | Out-File C:\Temp\servers.txt

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

拿着这张清单并将其交给你的老板。

想要 HTML 格式的所有已安装修补程序的列表吗?运行 PowerShell。


Get-HotFix | Select-Object HotFixID,InstalledOn | ConvertTo-Html | Set-Content C:\Temp\hotfixes.htm

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

但等一下。我们在第 7 部分(管道)中了解到,我们可以使用格式命令做很多事情。这也适用于格式表吗?答案是肯定的。但这不是一个好主意。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

请记住:仅在最后使用格式命令(Format-Table、Format-List 和 Format-Wide)。对于对象而言,Select-Object 是您的朋友。如果要在屏幕上列出数据,请使用格式表。对于其他一切,请使用 Select-Object。 Select-Object 按原样转发数据,格式表修改可能导致意外行为的数据。


属性向您展示对象是什么。使用 Get-Member 探索属性。使用 Select-Object 检索属性。选择对象和格式命令不是朋友。仅在代码末尾使用 Format-Table/List/Wide。使用 Select-Object 获取未更改的对象。


方法 - 对象可以做什么

让我们以简介中的例子为例。它显示了 Get-Date 的帮助。大多数示例都涉及属性(对象是什么)。但我们想要改变一些事情,我们想要做一些事情。在上一部分中,我们使用了 Select-Object。在这一部分中,我们将使用一种特殊的.NET 方法。你觉得这个而不是 Select-Object 怎么样?

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

好吧,我们慢点。您可以使用 Select-Object 或 a. NET方法()。如果您使用. NET 方法有一些优点。在 PowerShell 中键入以下内容:


(Get-Date).

现在按 CTRL + 空格键。哇,看起来不错。您将获得所有呈现的对象。随你挑选。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

括号有什么用?括号中的命令立即执行。这意味着当您使用方法时该值已经存在。好吧,有一种方法叫做 Addays。让我们回顾七年。不要忘记使用 TAB 以避免输入过多。


(Get-Date).AddYears(-7)

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

另一个示例是探索 Get-Service 命令的所有方法。


Get-Service | Get-Member -MemberType method

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

有一个方法叫做 Stop。听起来很好。我们可以用这个方法来停止服务。


(Get-Service spooler).Stop()

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

好吧,我不得不承认使用 Stop-Service 来停止服务更容易。

那么字符串呢?我将我的名字存储在变量中。变量用于存储信息。


$string='Patrick Gruenauer'

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

现在的问题是我们能用这个名字做什么?假设我们想显示前 2 个字母。如果您了解 Get-Member,那么您就能够探索该字符串的方法。


$string | Get-Member

在那里你会找到 Substring 方法。


$string.Substring(0,2)

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

好的。如果你想将名字和姓氏分开,那么可以使用 split 方法,不用说,你可以通过 Get-Member 找到这个方法。

我们必须寻找一个分隔符。我们的分隔符是我的名字和姓氏之间的空格。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

好的,我的名字存储在 $string 中。现在我用的是split的方法。


$string.Split('')

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

好的。


方法可以更改或执行某些操作。运行 Get-Member -MemberType Method 以探索方法。将命令和方法值放在括号中。


这一切到底是为了什么?

我无法一一提及。要有耐心。在下一部分中我们将讨论 WMI。然后你就会感受到物体的力量。但在结束这一部分之前,让我再举一个例子:我博客中的一个实际例子。您将获得用户列表。您想要从该文本文件创建用户。

这段代码对于初学者来说有点难以阅读,但我只想强调处理对象的重要性。这是用户列表。

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

这是代码:


Get-Content C:\temp\users.txt | ForEach-Object {$Split = $_.Split(" "); $given=$Split[0]; $sur=$Split[1]; New-ADUser -GivenName $given -Surname $sur -Name ($given + " " + $sur) -UserPrincipalName (($sur + "@" + "$env:userdnsdomain")).ToLower() -SamAccountName ($sur).ToLower() -AccountPassword (ConvertTo-SecureString -AsPlainText "Passw00rd123" -Force) -Enabled $true -ChangePasswordAtLogon $true -Verbose}

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

文本文件中的每个对象(字符串)将被分开。分隔符就是空格。如果您不完全理解此命令,请不要担心。它是活动目录。该命令采用每个名称并使用正确的名字和姓氏创建一个 Active Directory 用户。

完整文章可在此处找到:PowerShell:从文本文件添加 Active Directory 用户(批量)

两步法

遵循这些准则,您就可以从 PowerShell 中获得更多收益。

您所需要记住的只是两步方法。相信我。

1. 查询所有可能性:运行 Get-Member


Get-Date | Get-Member

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

2. 使用 ().select-object选择


(Get-Date -Year 1976 -Month 03 -Day 23).dayofyear


(Get-Date -Year 1976 -Month 03 -Day 23).dayofweek


(Get-Date -Year 1976 -Month 03 -Day 23).AddDays(10)

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

是的,今天是我的生日。是的,我已经不再是20岁了。是的,这篇文章差不多就结束了。 ;-)。我还有一个例子。

关于如何列出 Active Directory 用户属性的另一个很好的示例。


Get-ADUser petra -Properties * | Select-Object Name,LastLogonDate

[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)

在我忘记练习之前,直到下一部分。

锻炼

今天就这样。这是下一部分的练习。

属性

创建目录 C:\Temp1。在 C:\Temp1 中创建文本文件 testfile1.txt。仅使用 PowerShell。如果您需要帮助,请使用帮助 (Get-Help)。打开文件。现在使用 Select-Object 或其他技术显示以下属性:文件名、文件扩展名和上次访问日期。

方法

使用 Get-Date 从今天算起 10 年。回答以下问题:那是一年中的哪一天? (1..365?)

解决方案可以在下一部分中找到。

下一篇文章见:PowerShell 初学者(第 9 部分):WMI 的威力

Patrick Gruenauer,PowerShell MVP

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

取消回复欢迎 发表评论:

关灯