[玩转系统] PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)
作者:精品下载站 日期:2024-12-14 07:25:27 浏览:12 分类:玩电脑
PowerShell 初学者(第 8 部分):PowerShell 的强大功能 – 接触对象(获取成员、选择对象)
在 PowerShell 初学者(第 7 部分):管道(以及许多可供使用的示例)部分之后,我们现在将重点关注对象。您可以构建的基础知识。但在这之前我们先看一下上一个练习的答案。我们还将在第 7 部分中快速回顾一下迄今为止所学到的内容。
该系列的所有部分都可以在这里找到:PowerShell 初学者(系列)
回顾(第 7 部分)
运行 Get-Hotfix。仅以列表格式显示修补程序的数量 (KB) 和安装日期。
这是第 7 部分的练习。好的,我们必须运行 Get-Hotfix。然后我们必须将输出格式化为列表格式并仅显示两件事。名称和安装日期。为此我们需要管道。
让我们一步一步来做。
当您在不带任何参数的情况下运行 Get-Hotfix 时,您可以看到标头名称(我们将其称为对象属性,下面将详细介绍这一点)。现在我们有了名字。使用管道可以很容易地将其放入更复杂的命令中。
我们到了。
审查
管道获取管道左侧的所有内容并将其转发到管道右侧的命令。 Format-Table、Format-List 和 Format-Wide 调整命令的输出。
感受基于对象的 PowerShell 的强大功能
PowerShell 是面向对象的。这意味着什么以及这会带来什么?好吧,在面向对象的环境中,有人已经为你做了一些事情。真是个好人。那是谁?我不知道。肯定是微软的开发者,或者更确切地说是几个。 ?
我无法比《Windows PowerShell in Action》(第二版)的作者 Bruce Payette 说得更好:
您使用其他人为您定义的对象。
重点是什么?让我举一个例子。你当然知道 ipconfig,它是一个显示你的 IP 设置的命令。 Ipconfig 输出纯文本。
到目前为止,一切都很好。如果您只想显示 IPv4 地址怎么办?是的,我听到你大声喊道:“这是可能的,使用 find”。好的,让我们一起做。
现在假设我们只需要表格格式的 IPv4 地址和 IPv6 地址。现在事情变得非常复杂。从文本输出中输出或调用单个项目需要付出巨大的努力。
好的,与 ipconfig 等效的命令是 Get-NetIPAddress。
现在看看这个:
第二个更甜。让我再举一个例子:cmd 中的 dir 和 PowerShell 中的 Get-ChildItem。
Dir(如果在 cmd 中输入)输出纯文本。
Get-ChildItem 输出对象。
附注:如果您在 PowerShell 中运行 dir,则会执行 Get-ChildItem。这可能有点令人困惑。
这是对即将到来的主题的一个小尝试。 Get-ChilIdtem 和操作中的对象。
Get-ChildItem -File C:\Temp | Select-Object Name,LastWriteTime,CreationTime,Directory,Length
现在我们将深入研究 PowerShell 对象。
发现某人已经为您定义的事物(获取成员、选择对象)
我们将继续关注上面的例子。我已经执行了命令
Get-ChildItem -File C:\Temp | Select-Object Name,LastWriteTime,CreationTime,Directory,Length
现在让我们看一下 Get-ChildItem 的“正常”输出。它显示模式、上次写入时间、长度和名称。
我怎么知道还有更多? (创建时间,目录)?
我提前查看了 Get-Member 命令发生了什么。
Get-ChildItem | Get-Member
在那里我发现了两个属性:
然后我就简单地使用这个属性。
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 人员呢?我希望我稍微激怒了你。 ? 好的,我们开始吧。
我们区分属性和方法。
属性 - 对象是什么
属性向您展示了对象是什么。一个对象可以是绿色的,它可以是日期,它可以是真或假或其他东西。
我们以 Get-Volume 为例。
Get-Member 显示 Get-Volume 命令的所有属性。而且你必须使用管道。
Get-Volume | Get-Member -MemberType Properties
现在我们可以调用这些属性了。执行此操作的最佳方法是使用 Select-Object。假设我们要显示驱动器号、大小和剩余大小。顺便说一句:不要忘记使用 TAB。
Get-Volume | Select-Object DriveLetter,Size,SizeRemaining
另一个例子。您的网卡的连接速度是多少?
Get-NetAdapter | Get-Member -MemberType property
您会找到一个属性 LinkSpeed。
Get-NetAdapter | Select-Object LinkSpeed
好吧,我们就到此为止吧。我们需要这个做什么?一个例子。您想要将所有文件名保存在一个文件中。为此,我们需要所有文件名的列表,并且仅需要名称。只有名字!我们如何获得所有的名字?第1步是找出文件名的属性。
Get-ChildItem C:\Temp | Get-Member -MemberType property
您将找到一个名为 FullName 的属性。我们到了。
Get-ChildItem -Path C:\Temp\ | Select-Object FullName
并将其保存到文件中...
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
拿着这张清单并将其交给你的老板。
想要 HTML 格式的所有已安装修补程序的列表吗?运行 PowerShell。
Get-HotFix | Select-Object HotFixID,InstalledOn | ConvertTo-Html | Set-Content C:\Temp\hotfixes.htm
但等一下。我们在第 7 部分(管道)中了解到,我们可以使用格式命令做很多事情。这也适用于格式表吗?答案是肯定的。但这不是一个好主意。
请记住:仅在最后使用格式命令(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 怎么样?
好吧,我们慢点。您可以使用 Select-Object 或 a. NET方法()。如果您使用. NET 方法有一些优点。在 PowerShell 中键入以下内容:
(Get-Date).
现在按 CTRL + 空格键。哇,看起来不错。您将获得所有呈现的对象。随你挑选。
括号有什么用?括号中的命令立即执行。这意味着当您使用方法时该值已经存在。好吧,有一种方法叫做 Addays。让我们回顾七年。不要忘记使用 TAB 以避免输入过多。
(Get-Date).AddYears(-7)
另一个示例是探索 Get-Service 命令的所有方法。
Get-Service | Get-Member -MemberType method
有一个方法叫做 Stop。听起来很好。我们可以用这个方法来停止服务。
(Get-Service spooler).Stop()
好吧,我不得不承认使用 Stop-Service 来停止服务更容易。
那么字符串呢?我将我的名字存储在变量中。变量用于存储信息。
$string='Patrick Gruenauer'
现在的问题是我们能用这个名字做什么?假设我们想显示前 2 个字母。如果您了解 Get-Member,那么您就能够探索该字符串的方法。
$string | Get-Member
在那里你会找到 Substring 方法。
$string.Substring(0,2)
好的。如果你想将名字和姓氏分开,那么可以使用 split 方法,不用说,你可以通过 Get-Member 找到这个方法。
我们必须寻找一个分隔符。我们的分隔符是我的名字和姓氏之间的空格。
好的,我的名字存储在 $string 中。现在我用的是split的方法。
$string.Split('')
好的。
方法可以更改或执行某些操作。运行 Get-Member -MemberType Method 以探索方法。将命令和方法值放在括号中。
这一切到底是为了什么?
我无法一一提及。要有耐心。在下一部分中我们将讨论 WMI。然后你就会感受到物体的力量。但在结束这一部分之前,让我再举一个例子:我博客中的一个实际例子。您将获得用户列表。您想要从该文本文件创建用户。
这段代码对于初学者来说有点难以阅读,但我只想强调处理对象的重要性。这是用户列表。
这是代码:
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}
文本文件中的每个对象(字符串)将被分开。分隔符就是空格。如果您不完全理解此命令,请不要担心。它是活动目录。该命令采用每个名称并使用正确的名字和姓氏创建一个 Active Directory 用户。
完整文章可在此处找到:PowerShell:从文本文件添加 Active Directory 用户(批量)
两步法
遵循这些准则,您就可以从 PowerShell 中获得更多收益。
您所需要记住的只是两步方法。相信我。
1. 查询所有可能性:运行 Get-Member
Get-Date | Get-Member
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)
是的,今天是我的生日。是的,我已经不再是20岁了。是的,这篇文章差不多就结束了。 ;-)。我还有一个例子。
关于如何列出 Active Directory 用户属性的另一个很好的示例。
Get-ADUser petra -Properties * | Select-Object Name,LastLogonDate
在我忘记练习之前,直到下一部分。
锻炼
今天就这样。这是下一部分的练习。
属性
创建目录 C:\Temp1。在 C:\Temp1 中创建文本文件 testfile1.txt。仅使用 PowerShell。如果您需要帮助,请使用帮助 (Get-Help)。打开文件。现在使用 Select-Object 或其他技术显示以下属性:文件名、文件扩展名和上次访问日期。
方法
使用 Get-Date 从今天算起 10 年。回答以下问题:那是一年中的哪一天? (1..365?)
解决方案可以在下一部分中找到。
下一篇文章见:PowerShell 初学者(第 9 部分):WMI 的威力
Patrick Gruenauer,PowerShell MVP
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag