Select-Object -ExpandProperty与Get-ItemPropertyValue

问题描述 投票:0回答:1

最有可能的是我对PowerShell不了解的一些基本知识。我甚至不喜欢在编写中等大小的管道时,抓住一个属性会破坏工作流程,因为必须将语句放在语句周围,例如。

(Get-ChildItem ~\.gitconfig).Length

这很乏味。因为Length看起来非常像一个财产,人们会想

Get-ChildItem ~\.gitconfig | Get-ItemPropertyValue -Name Length

会工作。但事实并非如此。看一下File System PSDrive提供程序返回的System.IO.FileSystemInfo对象的接口,可以看到它没有Length属性。但它确实有FullName属性

Get-ChildItem ~\.gitconfig | Get-ItemPropertyValue -Name FullName

按预期工作。要使用管道检索文件的大小(Length),必须使用Select-Object-ExpandProperty之类的

Get-ChildItem ~\.gitconfig | Select-Object -ExpandProperty Length

如果条目是对象或属性,如何在对象之后放置.并迭代选项卡完成的结果?令人讨厌的是,即使是常见的操作也会让人感到困惑,例如阅读环境变量

Get-Item -Path Env:\USERNAME

回报

Name                           Value
----                           -----
USERNAME                       mnagy

如果它是一个项目,Get-ItemPropertyGet-ItemPropertyValue必须在这里发挥作用。由于结果的名称:价值结构,新人可能很想获得实际价值

Get-Item -Path Env:\USERNAME | Get-ItemPropertyValue

或实际阅读如何使用Get-ItemPropertyValue修改查询

Get-ItemPropertyValue -Path Env:\ -Name USERNAME

这实际上导致了

Get-ItemPropertyValue : Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.
At line:1 char:1
+ Get-ItemPropertyValue -Path Env:\ -Name USERNAME
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotImplemented: (:) [Get-ItemPropertyValue], PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands.GetItemPropertyValueCommand

整个结构似乎与我完全不一致并且最令人烦恼,但希望不是设计,而是因为我从错误的角度看待它。

powershell
1个回答
1
投票

第一个注意事项:qazxsw poi,qazxsw poi目录,对我来说很合适(给你里面的文件数量):

Length

我倾向于使用.hg来检查支持什么和不支持什么。

如果我检查它的目录Ps C:\> (Get-ChildItem .hg).Length 18

get-member

一个人如何知道是否放置一个。在一个对象之后并迭代完成选项卡的结果,如果该条目是一个对象或一个属性?

你用reports检查一下。

对于(Get-ChildItem reports) | gm TypeName: System.IO.FileInfo Name MemberType Definition ---- ---------- ---------- LinkType CodeProperty System.String LinkType{get=GetLinkType;} Mode CodeProperty System.String Mode{get=Mode;} Target CodeProperty System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=... AppendText Method System.IO.StreamWriter AppendText() CopyTo Method System.IO.FileInfo CopyTo(string destFileName), System.IO.FileInfo CopyTo(s... Create Method System.IO.FileStream Create() CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType) CreateText Method System.IO.StreamWriter CreateText() Decrypt Method void Decrypt() Delete Method void Delete() Encrypt Method void Encrypt() Equals Method bool Equals(System.Object obj) GetAccessControl Method System.Security.AccessControl.FileSecurity GetAccessControl(), System.Secur... GetHashCode Method int GetHashCode() GetLifetimeService Method System.Object GetLifetimeService() GetObjectData Method void GetObjectData(System.Runtime.Serialization.SerializationInfo info, Sys... GetType Method type GetType() InitializeLifetimeService Method System.Object InitializeLifetimeService() MoveTo Method void MoveTo(string destFileName) Open Method System.IO.FileStream Open(System.IO.FileMode mode), System.IO.FileStream Op... OpenRead Method System.IO.FileStream OpenRead() OpenText Method System.IO.StreamReader OpenText() OpenWrite Method System.IO.FileStream OpenWrite() Refresh Method void Refresh() Replace Method System.IO.FileInfo Replace(string destinationFileName, string destinationBa... SetAccessControl Method void SetAccessControl(System.Security.AccessControl.FileSecurity fileSecurity) ToString Method string ToString() PSChildName NoteProperty string PSChildName=jv_libgdbs_tests-20180822-Test.xml PSDrive NoteProperty PSDriveInfo PSDrive=C PSIsContainer NoteProperty bool PSIsContainer=False PSParentPath NoteProperty string PSParentPath=Microsoft.PowerShell.Core\FileSystem::C:\prg_sdk\stx8-j... PSPath NoteProperty string PSPath=Microsoft.PowerShell.Core\FileSystem::C:\prg_sdk\stx8-jv_swin... PSProvider NoteProperty ProviderInfo PSProvider=Microsoft.PowerShell.Core\FileSystem Attributes Property System.IO.FileAttributes Attributes {get;set;} CreationTime Property datetime CreationTime {get;set;} CreationTimeUtc Property datetime CreationTimeUtc {get;set;} Directory Property System.IO.DirectoryInfo Directory {get;} DirectoryName Property string DirectoryName {get;} Exists Property bool Exists {get;} Extension Property string Extension {get;} FullName Property string FullName {get;} IsReadOnly Property bool IsReadOnly {get;set;} LastAccessTime Property datetime LastAccessTime {get;set;} LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;} LastWriteTime Property datetime LastWriteTime {get;set;} LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;} Length Property long Length {get;} Name Property string Name {get;} BaseName ScriptProperty System.Object BaseName {get=if ($this.Extension.Length -gt 0){$this.Name.Re... VersionInfo ScriptProperty System.Object VersionInfo {get=[System.Diagnostics.FileVersionInfo]::GetVer... ,您可以再次检查:

Get-Member

现在检查USERNAME(您看到要询问的密钥及其值):

Get-Item -Path Env:\USERNAME
© www.soinside.com 2019 - 2024. All rights reserved.