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

[玩转系统] 关于使用

作者:精品下载站 日期:2024-12-14 02:17:29 浏览:12 分类:玩电脑

关于使用


简短描述

允许您指定要在会话中使用的名称空间。

详细描述

using 语句允许您指定要在会话中使用的命名空间。添加命名空间可简化 .NET 类和成员的使用,并允许您从脚本模块和程序集中导入类。

using 语句必须位于脚本或模块中的任何其他语句之前。其前面不能有未注释的语句,包括参数。

using 语句不得包含任何变量。

using 语句与变量的 using: 范围修饰符不同。有关详细信息,请参阅 about_Remote_Variables。

命名空间语法

要解析 .NET 命名空间中的类型:

using namespace <.NET-namespace>

指定命名空间可以更轻松地通过短名称引用类型。

示例 - 添加名称空间以进行类型名称解析

以下脚本获取“Hello World”字符串的加密哈希。

请注意 using namespace System.Textusing namespace System.IO 如何简化对 System.Text[UnicodeEncoding] 的引用System.IO 中的 /code> 和 [Stream][MemoryStream]

using namespace System.Text
using namespace System.IO

[string]$string = "Hello World"
## Valid values are "SHA1", "SHA256", "SHA384", "SHA512", "MD5"
[string]$algorithm = "SHA256"

[byte[]]$stringBytes = [UnicodeEncoding]::Unicode.GetBytes($string)

[Stream]$memoryStream = [MemoryStream]::new($stringBytes)
$getFileHashSplat = @{
    InputStream = $memoryStream
    Algorithm   = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()

模块语法

要从 PowerShell 模块加载类和枚举:

using module <module-name>

<module-name> 的值可以是模块名称、完整模块规范或模块文件的路径。

<module-name> 是路径时,该路径可以是完全限定的或相对的。相对路径相对于具有 using 语句的脚本进行解析。

<module-name> 是名称或模块规范时,PowerShell 会在 PSModulePath 中搜索指定的模块。

模块规范是一个具有以下键的哈希表。

  • ModuleName - 必需 指定模块名称。
  • GUID - 可选 指定模块的 GUID。
  • 必需至少指定以下三个键之一。

    • ModuleVersion - 指定模块的最低可接受版本。
  • MaximumVersion - 指定模块可接受的最大版本。
  • RequiredVersion - 指定模块的准确、必需的版本。它不能与其他版本密钥一起使用。

Import-Module#requires 语句仅导入模块定义的模块函数、别名和变量。不导入类和枚举。

using module 语句从脚本模块或二进制模块的根模块 (ModuleToProcess) 导入类和枚举。它不会一致地导入嵌套模块或点源到根模块的脚本中定义的类或枚举。直接在根模块中定义您希望模块外部的用户可以使用的类和枚举。

在开发脚本模块期间,通常会对代码进行更改,然后使用 Import-ModuleForce 参数加载新版本的模块。这仅适用于根模块中函数的更改。 Import-Module 不会重新加载任何嵌套模块。此外,无法加载任何更新的类或枚举。

为了确保您运行的是最新版本,您必须启动一个新会话。无法卸载在 PowerShell 中定义并使用 using 语句导入的类和枚举。

示例 - 从脚本模块加载类

在此示例中,名为 CardGames 的 PowerShell 脚本模块定义了以下类:

  • 甲板
  • 卡片

Import-Module#requires 语句仅导入模块定义的模块函数、别名和变量。不导入类。 using module 命令导入模块并加载类定义。

using module CardGames

[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)

汇编语法

以下语法在执行开始时将 .NET 类型从程序集加载到脚本中。您必须使用程序集文件的完全限定路径。

using assembly <.NET-assembly-path>

using assembly 语句与使用 Add-Type cmdlet 类似。但是,Add-Type cmdlet 在执行Add-Type 时添加类型,而不是在开始执行脚本时添加类型。有关详细信息,请参阅添加类型。

示例 - 从程序集中加载类型

此示例加载一个程序集,以便在处理数据时可以使用它的类。以下脚本将数据转换为 YAML 格式。

using assembly './YamlDotNet.dll'
using namespace YamlDotNet

$yamlSerializer = [Serialization.Serializer]::new()

$info = [ordered]@{
  Inventory = @(
    @{ Name = 'Apples' ; Count = 1234 }
    @{ Name = 'Bagels' ; Count = 5678 }
  )
  CheckedAt = [datetime]'2023-01-01T01:01:01'
}

$yamlSerializer.Serialize($info)
Inventory:
- Name: Apples
  Count: 1234
- Name: Bagels
  Count: 5678
CheckedAt: 2023-01-01T01:01:01.0000000

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

取消回复欢迎 发表评论:

关灯