首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用新脚本文件信息PrivateData?

如何使用新脚本文件信息PrivateData?
EN

Stack Overflow用户
提问于 2020-10-08 14:50:39
回答 2查看 175关注 0票数 2

我一直在使用一个与脚本文件同名的PSD1文件(例如Foo.ps1 --> Foo.psd1)来存储我脚本的设置。我在想,我也许能够利用脚本的PrivateData部分来存储这些信息,当脚本发布时,这些信息将包含在InstallScriptInfos文件夹中。

New-ScriptFileInfo命令有一个名为PrivateDatastring参数,我希望它创建一个类似于PSD1文件中存在的节(缩写):

代码语言:javascript
运行
AI代码解释
复制
PrivateData = @{
    PSData = @{
        # Prerelease = ''
        # Tags = @()
        # LicenseUri = ''
        # ProjectUri = ''
        # IconUri = ''
        # ReleaseNotes = ''    
    }
}

但是,在创建新脚本文件时,请设置此参数:

代码语言:javascript
运行
AI代码解释
复制
PS> New-ScriptInfo -Path .\Foo.ps1 -Description 'lorem ipsum' -PrivateData @{Key='Value'}

结果为一个字符串:

代码语言:javascript
运行
AI代码解释
复制
<#PSScriptInfo    
.VERSION 1.0
.GUID 4652dc63-6433-494a-8dcb-55cec29191d4
.AUTHOR pattif@contoso.com
.COMPANYNAME
.COPYRIGHT
.TAGS
.LICENSEURI
.PROJECTURI
.ICONURI
.EXTERNALMODULEDEPENDENCIES 
.REQUIREDSCRIPTS
.EXTERNALSCRIPTDEPENDENCIES
.RELEASENOTES
.PRIVATEDATA System.Collections.Hashtable
#>
<# 
.DESCRIPTION 
lorem ipsum
#> 
Param()

如果将此脚本发布到存储库:

代码语言:javascript
运行
AI代码解释
复制
Publish-Script -Path .\Foo.ps1 -Repository 'MyRepository'

生成的InstallScriptInfos\foo_InstalledScriptInfo不包含这段元数据:

代码语言:javascript
运行
AI代码解释
复制
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>Microsoft.PowerShell.Commands.PSRepositoryItemInfo</T>
      <T>System.Management.Automation.PSCustomObject</T>
      <T>System.Object</T>
    </TN>
    <MS>
      <S N="Name">foo</S>
      <S N="Version">1.0</S>
      <S N="Type">Script</S>
      <S N="Description">lorem ipsum</S>
      <S N="Author">pattif@contoso.com</S>
      <Obj N="CompanyName" RefId="1">
        <TN RefId="1">
          <T>System.Management.Automation.PSCustomObject</T>
          <T>System.Object</T>
        </TN>
      </Obj>
      <Nil N="Copyright" />
      <Ref N="PublishedDate" RefId="1" />
      <Obj N="InstalledDate" RefId="2">
        <DT>2020-10-08T09:28:45.542507-05:00</DT>
        <MS>
          <Obj N="DisplayHint" RefId="3">
            <TN RefId="2">
              <T>Microsoft.PowerShell.Commands.DisplayHintType</T>
              <T>System.Enum</T>
              <T>System.ValueType</T>
              <T>System.Object</T>
            </TN>
            <ToString>DateTime</ToString>
            <I32>2</I32>
          </Obj>
        </MS>
      </Obj>
      <Nil N="UpdatedDate" />
      <Nil N="LicenseUri" />
      <Nil N="ProjectUri" />
      <Nil N="IconUri" />
      <Obj N="Tags" RefId="4">
        <TN RefId="3">
          <T>System.Object[]</T>
          <T>System.Array</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <S>PSScript</S>
        </LST>
      </Obj>
      <Obj N="Includes" RefId="5">
        <TN RefId="4">
          <T>System.Collections.Hashtable</T>
          <T>System.Object</T>
        </TN>
        <DCT>
          <En>
            <S N="Key">DscResource</S>
            <Obj N="Value" RefId="6">
              <TNRef RefId="3" />
              <LST />
            </Obj>
          </En>
          <En>
            <S N="Key">Function</S>
            <Ref N="Value" RefId="6" />
          </En>
          <En>
            <S N="Key">RoleCapability</S>
            <Ref N="Value" RefId="6" />
          </En>
          <En>
            <S N="Key">Workflow</S>
            <Ref N="Value" RefId="6" />
          </En>
          <En>
            <S N="Key">Command</S>
            <Ref N="Value" RefId="6" />
          </En>
          <En>
            <S N="Key">Cmdlet</S>
            <Ref N="Value" RefId="6" />
          </En>
        </DCT>
      </Obj>
      <Nil N="PowerShellGetFormatVersion" />
      <Nil N="ReleaseNotes" />
      <Obj N="Dependencies" RefId="7">
        <TNRef RefId="3" />
        <LST />
      </Obj>
      <S N="RepositorySourceLocation">/Volumes/PowerShellRepository</S>
      <S N="Repository">MyRepository</S>
      <S N="PackageManagementProvider">NuGet</S>
      <Obj N="AdditionalMetadata" RefId="8">
        <TNRef RefId="1" />
        <MS>
          <S N="description">lorem ipsum</S>
          <S N="requireLicenseAcceptance">False</S>
          <S N="isLatestVersion">False</S>
          <S N="isAbsoluteLatestVersion">False</S>
          <S N="tags">PSScript</S>
          <S N="developmentDependency">False</S>
          <B N="IsPrerelease">false</B>
        </MS>
      </Obj>
      <S N="InstalledLocation">/Users/craig/.local/share/powershell/Scripts</S>
    </MS>
  </Obj>
</Objs>

此参数的用途是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-24 14:36:52

这比预期的要容易:

代码语言:javascript
运行
AI代码解释
复制
<#PSScriptInfo
.VERSION 0.0.0
.GUID 8249e67f-497d-4cef-aed1-4b2ccf56f974
.AUTHOR First Last
.COMPANYNAME 
.COPYRIGHT
.TAGS
.LICENSEURI
.PROJECTURI
.ICONURI
.EXTERNALMODULEDEPENDENCIES 
.REQUIREDSCRIPTS
.EXTERNALSCRIPTDEPENDENCIES
.RELEASENOTES
.PRIVATEDATA @{ Foo=123; Bar=$true; Name='lorem' }
#>

<#
.DESCRIPTION 
lorem ipsum
#>

$Info = Test-ScriptFileInfo $PSCommandPath
Invoke-Expression $Info.PrivateData

Name                           Value
----                           -----
Foo                            123
Bar                            True
Name                           lorem
票数 0
EN

Stack Overflow用户

发布于 2020-10-08 22:41:36

该参数的目的是存储有关实际模块的信息元数据,该模块由图库使用。ctrl + F privatedata

例如,如果您要向privatedata添加一些标记,其中一个是"banana“,那么另一个用户可以这样做来查找您的模块

代码语言:javascript
运行
AI代码解释
复制
 Find-Script -Tag "banana"

source

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64265125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文