[玩转系统] 关于方法
作者:精品下载站 日期:2024-12-14 02:21:33 浏览:14 分类:玩电脑
关于方法
简短描述
描述如何使用方法对 PowerShell 中的对象执行操作。
详细描述
PowerShell 使用对象来表示数据存储中的项目或计算机的状态。例如,FileInfo 对象代表文件系统驱动器中的文件,ProcessInfo 对象代表计算机上的进程。
对象具有存储有关对象的数据的属性,以及允许您更改对象的方法。
“方法”是一组指令,指定可以对对象执行的操作。例如,FileInfo
对象包含 CopyTo
方法,用于复制 FileInfo
对象表示的文件。
要获取任何对象的方法,请使用 Get-Member
cmdlet。使用值为“Method”的 MemberType 属性。以下命令获取进程对象的方法。
Get-Process | Get-Member -MemberType Method
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
BeginErrorReadLine Method System.Void BeginErrorReadLine()
BeginOutputReadLine Method System.Void BeginOutputReadLine()
...
Kill Method System.Void Kill()
Refresh Method System.Void Refresh()
Start Method bool Start()
ToString Method string ToString()
WaitForExit Method bool WaitForExit(int milliseconds), ...
WaitForInputIdle Method bool WaitForInputIdle(int millisecon...
要执行或“调用”对象的方法,请键入点 (.)、方法名称和一组括号“()”。如果该方法有参数,请将参数值放在括号内。每个方法调用都需要括号,即使没有参数也是如此。如果该方法采用多个参数,则它们应该用逗号分隔。
例如,以下命令调用进程的 Kill 方法来结束计算机上的记事本进程。
$notepad = Get-Process notepad
$notepad.Kill()
通过组合上述语句可以缩短该示例。
(Get-Process Notepad).Kill()
Get-Process
命令包含在括号中,以确保它在调用 Kill 方法之前运行。然后在返回的 Process 对象上调用 Kill 方法。
另一个非常有用的方法是字符串的Replace
方法。 Replace
方法替换字符串中的文本。在下面的示例中,点 (.) 可以紧跟在字符串结束引号之后。
'this is rocket science'.Replace('rocket', 'rock')
this is rock science
如前面的示例所示,您可以对通过使用命令获得的对象、变量中的对象或任何生成对象的对象(如引号中的字符串)调用方法。
从 PowerShell 4.0 开始,支持使用动态方法名称进行方法调用。
学习方法
要查找对象方法的定义,请转至该对象类型的帮助主题并查找其方法页面。例如,以下页面描述了进程对象System.Diagnostics.Process 的方法。
要确定方法的参数,请查看方法定义,它类似于 PowerShell cmdlet 的语法图。
方法定义可能具有一个或多个方法签名,类似于 PowerShell cmdlet 的参数集。签名显示了调用该方法的命令的所有有效格式。
例如,FileInfo
类的 CopyTo
方法包含以下两个方法签名:
CopyTo(String destFileName)
CopyTo(String destFileName, Boolean overwrite)
第一个方法签名采用目标文件名(和路径)。以下示例使用第一个 CopyTo
方法将 Final.txt
文件复制到 C:\Bin
目录。
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
笔记
与 PowerShell 的参数模式不同,对象方法以表达式模式执行,这是到 PowerShell 所基于的 .NET 框架的传递。在表达式模式下,不允许使用裸字参数(不带引号的字符串)。当使用路径作为参数与将路径作为参数时,您可以看到这种差异。您可以在 about_Parsing 中阅读有关解析模式的更多信息
第二个方法签名采用目标文件名和布尔值,该布尔值确定是否应覆盖目标文件(如果已存在)。
以下示例使用第二个 CopyTo
方法将 Final.txt
文件复制到 C:\Bin
目录,并覆盖现有文件。
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
成员访问枚举
从 PowerShell 3.0 开始,当您使用成员访问运算符 (.
) 访问列表集合中不存在的方法时,PowerShell 会自动枚举集合中的项目并在每个项目上调用该方法。物品。有关详细信息,请参阅 about_Member-Access_Enumeration。
示例
以下示例运行对象集合中各个进程对象的 Kill 方法。
第一个命令启动记事本进程的三个实例。 Get-Process
获取记事本进程的所有三个实例并将它们保存在 $p
变量中。
Notepad; Notepad; Notepad
$p = Get-Process Notepad
$p.Count
3
下一个命令在 $p
变量中的所有三个进程上运行 Kill 方法。即使进程集合没有 Kill
方法,此命令仍然有效。
$p.Kill()
Get-Process Notepad
Get-Process
命令确认 Kill
方法有效。
Get-Process : Cannot find a process with the name "notepad". Verify the proc
ess name and call the cmdlet again.
At line:1 char:12
+ Get-Process <<<< notepad
+ CategoryInfo : ObjectNotFound: (notepad:String) [Get-Process]
, ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShel
l.Commands.GetProcessCommand
此示例在功能上等效于使用 Foreach-Object
cmdlet 在集合中的每个对象上运行该方法。
$p | ForEach-Object {$_.Kill()}
ForEach 和Where 方法
从 PowerShell 4.0 开始,支持使用方法语法进行集合筛选。这允许在处理集合 ForEach
和 Where
时使用两种新方法。
您可以在 about_arrays 中阅读有关这些方法的更多信息
存在多个重载时调用特定方法
调用 .NET 方法时请考虑以下场景。如果方法接受一个对象,但通过采用更具体类型的接口进行重载,PowerShell 将选择接受该对象的方法,除非您将其显式转换为该接口。
Add-Type -TypeDefinition @'
// Interface
public interface IFoo {
string Bar(int p);
}
// Type that implements the interface
public class Foo : IFoo {
// Direct member method named 'Bar'
public string Bar(object p) { return $"object: {p}"; }
// *Explicit* implementation of IFoo's 'Bar' method().
string IFoo.Bar(int p) {
return $"int: {p}";
}
}
'@
在此示例中,选择了 Bar 方法的不太具体的object
重载。
[Foo]::new().Bar(1)
object: 1
在此示例中,我们将该方法强制转换为接口 IFoo,以选择 Bar 方法的更具体的重载。
([IFoo] [Foo]::new()).Bar(1)
int: 1
使用采用文件系统路径的 .NET 方法
PowerShell 支持每个进程多个运行空间。每个运行空间都有自己的当前目录。这与当前进程的工作目录不同:[System.Environment]::CurrentDirectory
。
.NET 方法使用进程工作目录。 PowerShell cmdlet 使用运行空间位置。此外,.NET 方法仅适用于本机文件系统路径,不适用于 PowerShell Path 对象。要将 PowerShell 路径与 .NET 方法结合使用,必须先将路径解析为文件系统本机路径,然后再将其传递给 .NET 方法。
参见
- about_Objects
- about_Member-Access_Enumeration
- about_属性
- Get-Member
猜你还喜欢
- 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