37、PowerShell会话配置与SDDL安全描述符管理指南

PowerShell会话配置与SDDL安全描述符管理指南

1. PowerShell会话配置基础

在PowerShell中,会话配置涉及多个关键方面,包括变量定义、环境变量声明、类型和格式文件加载等。以下是详细介绍:

1.1 变量定义

变量定义可以是动态或静态的。示例如下:

VariableDefinitions = "@{
    Name = 'Variable1';
    Value = { # Dynamic Value }
},
@{
    Name = 'Variable1';
    Value = 'Static'
}"

1.2 环境变量声明

环境变量需要以字符串形式包装的哈希表来声明,语法如下:

EnvironmentVariables = "@{
    Variable1 = 'Variable Value';
    Variable2 = 'Variable Value2';
    Variable3 = 'Variable Value3';
}"

1.3 类型和格式文件加载

类型文件(.ps1xml)和格式文件(.ps1xml)可以加载到会话中,语法如下:

TypesToProcess = 'Types1.ps1xml', 'Types2.ps1xml'
FormatsToProcess = 'Types1.ps1xml', 'Types2.ps1xml'

1.4 程序集加载

可以将会话加载程序集,语法如下:

AssembliesToLoad = 'Newtonsoft.Json', 'System.IO.File'

1.5 挂起注册超时

可以设置PowerShell会话配置注册的超时时间,默认超时阈值为10秒,设置为0则禁用超时。语法如下:

HungRegistrationTimeout = 50

2. 连接到PowerShell会话配置

传统上,连接到PowerShell远程会话时,管理员和服务账户使用 Invoke-Command 、 Import-PSSession 、 New-PSSession 或 Enter-PSSession 连接到远程计算机。默认情况下,这些连接使用 Microsoft.PowerShell 会话配置。通过使用 -ConfigurationName 参数,可以指定不同的会话配置。

2.1 示例:使用自定义会话配置发送PSRemoting命令

$params = @{
    ComputerName = 'DC1'
    ConfigurationName = 'JEAMaintenance'
    ScriptBlock = { Get-Service }
}
Invoke-Command @params

3. 角色定义设计考虑因素

在部署PowerShell会话配置文件时,需要考虑Active Directory在PowerShell远程治理中的作用。以下是一些关键考虑因素:

3.1 使用Active Directory组

使用Active Directory组来定义管理员权限范围,避免直接将用户分配给配置,以减少解决方案的复杂性。

3.2 描述角色定义

使用Active Directory组时,描述角色定义、功能和计算机。例如, PSHRemoting-<ComputerName>-<Capability> 可以是 PSHRemoting-DC1-ServiceMaintenance 。同时,确保功能名称与Active Directory组匹配。

3.3 实施基于角色的访问控制(RBAC)

实施RBAC以防止直接分配给Active Directory组。利用RBAC角色和组确保用户角色本身接收PowerShell远程会话配置,从而使角色控制用户访问。

3.4 简化角色功能

将每个角色功能简化为单个实例。例如,帮助台可能需要在应用程序服务器上查询/停止进程和查询/停止/启动服务的能力,可以将其拆分为两个角色功能:
1. 查询/停止进程
2. 查询/停止/启动服务

3.5 示例:在会话配置中定义两个角色功能

JeaSessionConfiguration HelpDeskManagmenetEndpoint
{
    Name = 'JEAMaintenance'
    RunAsVirtualAccount = $true
    Ensure = 'Present'
    DependsOn = 
        '[JeaRoleCapabilities]ServiceMaintenance',
        '[JeaRoleCapabilities]ProcessMaintenance'
    # 我们通过指定角色功能Active Directory组来定义角色功能
    RoleDefinitions = "
        @{
            'Contoso\PSHRemoting-APP1-ServiceMaintenance' = @{
                RoleCapabilities = 'ServiceMaintenance'
            }
            'Contoso\PSHRemoting-APP1-ProcessMaintenance' = @{
                RoleCapabilities = 'ProcessMaintenance'
            }
        }
    "
}

3.6 使用DSC编译器

使用DSC编译器为每个服务器插值配置,以减少节点管理复杂性,并使不同的会话配置和角色功能模块化和可重用。

3.7 选择认证机制

定义WSMan配置时,Kerberos是最佳认证机制,提供相互端到端认证和加密。NTLM是次佳选择,但不支持相互认证。

3.8 考虑安全用例

定义PowerShell会话配置时,考虑该配置的安全用例,并针对每个用例进行简化。

3.9 强制使用PowerShell语言模式

始终选择最严格的语言模式,同时不影响可用性。语言模式从最严格到最宽松依次为:
1. No Language:PowerShell不允许任何形式的脚本文本。
2. Restricted Language:用户可以运行命令,但不能使用脚本块。
3. Constrained Language:请参阅受约束语言模式章节。
4. Full Language:默认语言模式,所有功能可用。

4. 管理PowerShell会话配置

当DSC管理PowerShell会话配置时,通常不需要对会话配置进行持续更改。可以使用 Get-PSSessionConfiguration 查询会话配置,并使用 Set-PSSessionConfiguration 进行配置。

4.1 查询会话配置

可以使用 Get-PSSessionConfiguration 检索会话配置信息。

4.1.1 示例:检索注册的会话配置列表
Get-PSSessionConfiguration

结果示例:
| Name | PSVersion | StartupScript | RunAsUser | Permission |
| — | — | — | — | — |
| microsoft.powershell | 5.1 | | | NT AUTHORITY\NETWORK AccessDenied, NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed |
| microsoft.powershell.workflow | 5.1 | | | NT AUTHORITY\NETWORK AccessDenied, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed |
| microsoft.powershell32 | 5.1 | | | NT AUTHORITY\NETWORK AccessDenied, NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed |

4.1.2 示例:显示单个会话配置的所有属性
Get-PSSessionConfiguration | Select-Object -First 1 | Format-List *

4.2 更改会话配置属性

可以使用 Set-PSSessionConfiguration 和 -Name 参数更改PowerShell会话配置属性。

4.2.1 示例:向microsoft.powershell会话配置添加启动脚本
# 启动脚本
Set-Content -Value 'Write-Host "Startup!"' -Path 'C:\Temp\Startup.ps1'

# 使用PowerShell控制台实现更改
Get-PSSessionConfiguration -Name microsoft.powershell |
    Set-PSSessionConfiguration -StartupScript C:\TEMP\Startup.ps1

注意:如果最近取消注册了使用此名称的配置, Set-PSSessionConfiguration 可能需要重启WinRM服务,因为某些系统数据结构可能仍被缓存。在这种情况下,可能需要重启WinRM,并且所有连接到Windows PowerShell会话配置的WinRM会话(如 Microsoft.PowerShell 和使用 Register-PSSessionConfiguration cmdlet创建的会话配置)将断开连接。

4.2.2 示例:使用更新后的配置进入PSRemoting会话
Enter-PSSession -ComputerName . -ConfigurationName 'microsoft.powershell'

结果示例:

Startup!
[localhost]: PS C:\>

4.3 更新现有会话配置的限制

更新现有会话配置存在一些限制,因为某些参数在cmdlet中不存在。 Set-PSSessionConfiguration 的参数列表如下:

Set-PSSessionConfiguration
[-Name] <String>
[-RunAsCredential <PSCredential>]
[-ThreadOptions <PSThreadOptions>]
[-AccessMode <PSSessionConfigurationAccessMode>]
[-UseSharedProcess]
[-StartupScript <String>]
[-MaximumReceivedDataSizePerCommandMB <Double>]
[-MaximumReceivedObjectSizeMB <Double>]
[-SecurityDescriptorSddl <String>]
[-ShowSecurityDescriptorUI]
[-Force]
[-NoServiceRestart]
[-TransportOption <PSTransportOption>]
-Path <String>
[-WhatIf]
[-Confirm]
[<CommonParameters>]

要更改其他属性,应更新 New-PSSessionConfiguration 生成的 .pssc 文件,然后使用 -Path 参数与 Set-PSSessionConfiguration 一起使用。

4.3.1 示例:从文件更新会话配置
# 文件路径
# C:\Temp\TempPowerShellSession.pssc
@{
    # 此文档使用的架构版本号
    SchemaVersion = '2.0.0.0'
    # 用于唯一标识此文档的ID
    GUID = '109fee56-540e-4688-801f-a390842355b4'
    # 此文档的作者
    Author = 'Michael Zanatta'
}

# 更新PowerShell会话配置
Set-PSSessionConfiguration -Path 'C:\Temp\TempPowerShellSession.pssc'

当更改PowerShell会话配置时,会看到WinRM服务将重启的警告,这将断开任何现有的PowerShell远程会话。要防止服务重启,使用 -NoServiceRestart 参数;要抑制服务重启的确认,使用 -Force 参数。需要注意的是, -NoServiceRestart 参数不能保证WinRM服务不会重启,通常应默认服务会重启。

5. 安全描述符定义语言(SDDL)概述

5.1 术语解释

  • 安全描述符定义语言(SDDL) :安全描述符的字符串表示形式。
  • 安全描述符 :关于可安全对象的安全信息的数据结构,包括其所有者、组、DACL和SACL。
  • 可安全对象 :任何可以有安全描述符的对象或资源,如文件、进程或事件。
  • ** discretionary访问控制列表(DACL)**:标识允许或拒绝访问可安全对象的受托人(访问控制条目)列表。
  • 系统访问控制列表(SACL) :标识系统在成功或失败访问可安全对象时审计的受托人(访问控制条目)列表。
  • 受托人 :ACE应用于的用户账户、组或登录会话。
  • 访问控制列表(ACL) :一组ACE,共同定义可安全对象在DACL或SACL中的访问权限。
  • 访问控制条目(ACE) :表示受托人对可安全对象的特定访问权限的单个条目。
  • 安全标识符(SID) :表示受托人的不可变标识符。

5.2 SDDL概述

SDDL是一种将安全描述符定义为字符串的格式。在PowerShell会话配置中,SDDL用于定义哪些用户可以使用 AccessAllowed 和 AccessDenied ACE标志连接到PowerShell远程会话。当在PowerShell会话配置中添加角色功能时,系统会将关联的AD组添加到SDDL字符串中的 AccessAllowed DACL中。

当查看注册的会话配置时,PowerShell会自动将权限格式化为可读文本。

5.2.1 示例:显示JeaEndpoint会话配置的格式化权限
Get-PSSessionConfiguration

结果示例:
| Name | PSVersion | StartupScript | RunAsUser | Permission |
| — | — | — | — | — |
| JeaEndpoint | 5.1 | | | CONTOSO\ServiceMaintenanceCapability AccessAllowed |

然而,在WSMan PSDrive中查看权限配置会显示SDDL格式。

5.2.2 示例:JeaEndpoint会话配置的等效原始SDDL权限
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\
Plugin\JEAMaintenance\Resources\Resource_417209259\
Security\Security_5898658

Key:
Uri
Value: http://schemas.microsoft.com/powershell/JEAMaintenance

Key:
Sddl
Value: O:NSG:BAD:P(D;;GA;;;NU)
(A;;GA;;;S-1-5-21-1769934282-1541694284-2448955753-1106)
(A;;GA;;S-1-5-21-1769934282-1541694284-2448955753-1107)S:P(AU;FA;GA;;;WD)
(AU;SA;GXGW;;;WD)

Key:
ExactMatch
Value: False

Key:
xmlns
Value: http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration

Key:
ParentResourceUri
Value: http://schemas.microsoft.com/powershell/JEAMaintenance

5.3 SDDL语法

SDDL遵循特定的语法: O:<Owner>G:<Primary Group>D:<DACL>:S<SACL> ,每个部分用冒号(:)分隔。

5.3.1 原始SDDL示例
O:NSG:BAD:P(D;;GA;;;NU)(A;;GA;;;S-1-5-21-1769934282-1541694284-2448955753-1106)
(A;;GA;;S-1-5-21-1769934282-1541694284-2448955753-1107)S:P(AU;FA;GA;;;WD)
(AU;SA;GXGW;;;WD)
5.3.2 SDDL的组成部分
  • O: 对象的所有者 :可安全对象的所有者,作为受托人SID或知名SID字符串常量。SID字符串常量包括:
  • “NS” : 网络服务。
  • “BA” : 内置管理员。
  • “BG” : 内置来宾。
  • “WD” : 所有人。
  • “SY” : 本地系统。
  • “AU” : 经过身份验证的用户。
  • G: 对象的主组 :主组是为了向后兼容而保留的遗留属性,PowerShell会话配置不使用它们。
  • D: DACL :定义确定资源访问权限的权限,语法为: dacl_flag(string_ace1)(string_ace2)...
  • dacl_flag :应用于DACL的继承控制标志。标志可以是:
    • “P” : 阻止从层次结构中较高的容器继承。
    • “AR” : 允许继承。
    • “AI” : 子对象继承权限。
  • (string_ace1)(string_ace2)… :ACE。每个ACE用括号 (string_ace1) 包装。
  • S: SACL :确定资源审计权限的审计权限,语法为: sacl_flag(string_ace1)(string_ace2)... 。SACL与dacl_flags具有相同的语法和控制标志。

ACE字符串包含几个组件:
| 组件 | 描述 | 可能的值 |
| — | — | — |
| ACE类型 | 定义ACE类型的值 | “A” : 允许访问
“D” : 拒绝访问
“AU” : 审计 |
| ACE标志 | 控制继承和审计行为 | “CI” : 容器继承
“OI” : 对象继承
“SA” : 审计成功
“FA” : 审计失败 |
| 权限 | 控制标准、特定和通用权限 | “GA” : 所有通用访问
“GR” : 读取访问
“RC” : 读取/控制标准访问
“SD” : 删除 |
| 账户SID | 目标SID | |
| 对象GUID | 在PowerShell会话配置中不使用 | |
| 继承对象GUID | 在PowerShell会话配置中不使用 | |
| 资源属性 | 在PowerShell会话配置中不使用 | |

可以通过追加多个标志来组合它们。例如,组合此表中的所有标志将产生 GAGRRCSD 。

5.4 读取SDDL

可以使用PowerShell中的 ConvertFrom-SddlString 将解析到PowerShell会话配置文件中的SDDL转换为可读的 [PSObject] 。需要注意的是, ConvertFrom-SddlString 仅在Windows上可用。

5.4.1 示例:将原始SDDL字符串转换为格式化权限
# 显示SDDL值
$SDDL.Value

# 将其转换为PowerShell对象
$SDDL.Value | ConvertFrom-SddlString

结果示例:

Owner : NT AUTHORITY\NETWORK SERVICE
Group : BUILTIN\Administrators
DiscretionaryAcl : {
    NT AUTHORITY\NETWORK: AccessDenied (GenericAll),
    CONTOSO\ServiceMaintenanceCapability: AccessAllowed (GenericAll),
    CONTOSO\ProcessMaintenanceCapability: AccessAllowed (GenericAll)
}
SystemAcl : {
    Everyone: SystemAudit FailedAccess (GenericAll),
    Everyone: SystemAudit SuccessfulAccess (GenericExecute, GenericWrite)
}
RawDescriptor : System.Security.AccessControl.CommonSecurityDescriptor

要对现有SDDL进行调整,可以将SDDL字符串解析为 [RawSecurityDescriptor] 。

5.4.2 示例:通过转换为 [RawSecurityDescriptor] 修改SDDL字符串
$SecurityDescriptor =
    [System.Security.AccessControl.RawSecurityDescriptor]::new(
        'SDDL STRING'
    )
# 进行调整

# 导出回SDDL字符串格式
$SecurityDescriptor.GetSddlForm(
    [System.Security.AccessControl.AccessControlSections]::All
)

5.5 从安全描述符创建SDDL

可以使用 [RawSecurityDescriptor] 类从安全描述符创建SDDL。创建安全描述符的过程如下:

5.5.1 定义所有者

实例化 [SecurityIdentifier] 类,使用预定义受托人或SID:

$Owner = [System.Security.Principal.SecurityIdentifier]::new("NS")
5.5.2 定义主组

使用相同的类,使用预定义受托人或SID创建对象:

$PrimaryGroup = [System.Security.Principal.SecurityIdentifier]::new("BA")
5.5.3 创建 discretionary ACL

创建一个空的discretionary ACL对象(使用 [RawAcl] ):

$DiscretionaryACL = [System.Security.AccessControl.RawAcl]::new(0,0)
5.5.4 创建DACL的ACE

创建一个空的 [ObjectAce] ACE对象,包含:
1. 限定符: [AceQualifier]
2. 安全标识符(受托人): [SecurityIdentifier]

示例:

$EveroneAllowedACE = [System.Security.AccessControl.ObjectAce]::new(
    [System.Security.AccessControl.AceFlags]::None,
    # 定义一个限定符。在这种情况下,我们将允许访问
    [System.Security.AccessControl.AceQualifier]::AccessAllowed,
    1,
    # 定义一个安全标识符
    # 'WD'是所有人的缩写版本
    [System.Security.Principal.SecurityIdentifier]::new('WD'),
    [System.Security.AccessControl.ObjectAceFlags]::None,
    [System.Guid]::NewGuid(),
    [System.Guid]::NewGuid(),
    $false,
    $null
)
5.5.5 将ACE添加到discretionary ACL
$index = 0
# 添加到ACL
$DiscretionaryACL.InsertAce($index, $EveroneAllowedACE)

要添加更多ACE,请递增 $index 变量。

5.5.6 创建系统ACL

创建一个空的系统ACL对象(使用 [RawAcl] ):

$SystemACL = [System.Security.AccessControl.RawAcl]::new(0,0)
5.5.7 创建SACL的ACE

创建一个空的 [ObjectAce] ACE对象,包含:
1. 定义审计类型的标志( AceFlags )。
2. 限定符: [AceQualifier] 。示例将使用 SystemAudit 枚举。
3. 安全标识符(受托人): [SecurityIdentifier] 。

示例:

# 插入ACE到SystemACL
$EveroneAuditACE = [System.Security.AccessControl.ObjectAce]::new(
    # 定义一个标志
    [System.Security.AccessControl.AceFlags]::SuccessfulAccess,
    # 定义一个限定符
    [System.Security.AccessControl.AceQualifier]::SystemAudit,
    1,
    # 定义一个安全标识符
    # 'WD'是所有人的缩写版本
    [System.Security.Principal.SecurityIdentifier]::new('WD'),
    [System.Security.AccessControl.ObjectAceFlags]::None,
    [System.Guid]::NewGuid(),
    [System.Guid]::NewGuid(),
    $false,
    $null
)
5.5.8 将ACE添加到系统ACL
$index = 0
# 添加到ACL
$SystemACL.InsertAce($index, $EveroneAuditACE)

要添加更多ACE,请递增 $index 变量。

5.5.9 定义安全描述符的控制标志

定义安全描述符的控制标志以确定描述符的行为。PowerShell会话配置安全描述符包含:

$ControlFlags = [System.Security.AccessControl.ControlFlags]

$Flags = @(
    # 指定DACL不为空
    # 由资源管理器或用户设置
    $ControlFlags::DiscretionaryAclPresent,
    # 指定SACL不为空
    # 由资源管理器或用户设置
    $ControlFlags::SystemAclPresent,
    # 指定资源管理器阻止自动继承
    # 由资源管理器或用户设置
    $ControlFlags::DiscretionaryAclProtected,
    # 指定资源管理器阻止自动继承
    # 由资源管理器或用户设置
    $ControlFlags::SystemAclProtected,
    # 指定安全描述符二进制表示形式为自相对格式。此标志始终设置
    $ControlFlags::SelfRelative
)

有关完整的控制标志列表,请参阅 ControlFlags .NET类文档。

5.5.10 创建安全描述符并导出为SDDL
# 创建安全描述符,解析所有先前的变量
$SecurityDescriptor =
    [System.Security.AccessControl.RawSecurityDescriptor]::new(
        $Flags, $Owner, $PrimaryGroup, $SystemACL, $DiscretionaryACL
    )
# 现在安全描述符存在,
# 通过调用GetSddlForm()将其转换为SDDL
$SecurityDescriptor.GetSddlForm(
    [System.Security.AccessControl.AccessControlSections]::All
)
5.5.11 完整示例:从头开始构建SDDL字符串
# 步骤1: 创建所有者
# 或者使用SID
# $Owner = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-21-2274662803-2033504868-1650952085-500')
# 在这种情况下,我们将使用预定义受托人
# NS是'网络安全'的SID字符串常量
$Owner = [System.Security.Principal.SecurityIdentifier]::new("NS")

# 步骤2: 主组
# BA是'内置管理员'的SID字符串常量
$PrimaryGroup = [System.Security.Principal.SecurityIdentifier]::new("BA")

# 步骤3: 创建discretionary ACL
$DiscretionaryACL = [System.Security.AccessControl.RawAcl]::new(0,0)

# 步骤4: 创建ACE
$EveroneAllowedACE = [System.Security.AccessControl.ObjectAce]::new(
    [System.Security.AccessControl.AceFlags]::None,
    [System.Security.AccessControl.AceQualifier]::AccessAllowed,
    1,
    # 'WD'是'所有人'的SID字符串常量
    [System.Security.Principal.SecurityIdentifier]::new('WD'),
    [System.Security.AccessControl.ObjectAceFlags]::None,
    [System.Guid]::NewGuid(),
    [System.Guid]::NewGuid(),
    $false,
    $null
)

# 步骤5: 将ACE添加到ACL
$index = 0
# 添加到ACL
$DiscretionaryACL.InsertAce($index, $EveroneAllowedACE)

# 步骤6: 创建系统ACL
$SystemACL = [System.Security.AccessControl.RawAcl]::new(0,0)

通过以上步骤和示例,你可以全面了解PowerShell会话配置和SDDL安全描述符的管理,包括变量定义、会话连接、角色设计、配置管理以及SDDL的读取、修改和创建等操作。希望这些内容对你在PowerShell环境中的管理工作有所帮助。

6. 管理PowerShell会话配置与SDDL的实际应用案例

6.1 综合会话配置与角色功能部署案例

假设我们需要为一个企业的不同部门部署特定的PowerShell会话配置。以财务部门为例,他们需要对财务服务器进行特定的操作,如查询财务报表和管理财务账户。我们可以按照以下步骤进行部署:

6.1.1 定义角色功能

首先,定义两个角色功能:查询财务报表和管理财务账户。

# 查询财务报表角色功能
JeaRoleCapabilities FinanceReportQuery
{
    Name = 'FinanceReportQuery'
    VisibleCmdlets = 'Get-FinanceReport'
}

# 管理财务账户角色功能
JeaRoleCapabilities FinanceAccountManagement
{
    Name = 'FinanceAccountManagement'
    VisibleCmdlets = 'New-FinanceAccount', 'Remove-FinanceAccount'
}
6.1.2 定义会话配置

然后,定义一个会话配置,将这两个角色功能分配给财务部门的AD组。

JeaSessionConfiguration FinanceEndpoint
{
    Name = 'FinanceMaintenance'
    RunAsVirtualAccount = $true
    Ensure = 'Present'
    DependsOn = 
        '[JeaRoleCapabilities]FinanceReportQuery',
        '[JeaRoleCapabilities]FinanceAccountManagement'
    RoleDefinitions = "
        @{
            'Contoso\FinanceDepartment' = @{
                RoleCapabilities = 'FinanceReportQuery', 'FinanceAccountManagement'
            }
        }
    "
}
6.1.3 部署会话配置

最后,使用DSC编译器部署会话配置到财务服务器。

# 假设使用Datum作为DSC编译器
# 配置Datum的YAML文件
# 这里省略具体的YAML配置内容
# 部署配置
Invoke-Datum -Path 'C:\Datum\FinanceConfig.yaml'

6.2 SDDL在权限管理中的应用案例

假设我们要对一个重要的PowerShell会话配置进行权限管理,只允许特定的用户组访问。

6.2.1 查看现有权限

首先,查看现有会话配置的权限。

Get-PSSessionConfiguration -Name 'ImportantSession'

结果可能如下:
| Name | PSVersion | StartupScript | RunAsUser | Permission |
| — | — | — | — | — |
| ImportantSession | 5.1 | | | NT AUTHORITY\NETWORK AccessDenied, BUILTIN\Administrators AccessAllowed |

6.2.2 修改SDDL权限

假设我们要添加一个新的用户组 Contoso\SpecialUsers ,允许他们访问该会话配置。我们可以按照以下步骤修改SDDL:

# 获取现有SDDL
$SDDL = (Get-PSSessionConfiguration -Name 'ImportantSession').SecurityDescriptorSddl

# 将SDDL解析为RawSecurityDescriptor
$SecurityDescriptor = [System.Security.AccessControl.RawSecurityDescriptor]::new($SDDL)

# 创建新的ACE
$NewACE = [System.Security.AccessControl.ObjectAce]::new(
    [System.Security.AccessControl.AceFlags]::None,
    [System.Security.AccessControl.AceQualifier]::AccessAllowed,
    1,
    [System.Security.Principal.SecurityIdentifier]::new('Contoso\SpecialUsers'),
    [System.Security.AccessControl.ObjectAceFlags]::None,
    [System.Guid]::NewGuid(),
    [System.Guid]::NewGuid(),
    $false,
    $null
)

# 将新的ACE添加到DACL
$SecurityDescriptor.DiscretionaryAcl.InsertAce(0, $NewACE)

# 导出新的SDDL
$NewSDDL = $SecurityDescriptor.GetSddlForm([System.Security.AccessControl.AccessControlSections]::All)

# 更新会话配置的SDDL
Set-PSSessionConfiguration -Name 'ImportantSession' -SecurityDescriptorSddl $NewSDDL

6.3 流程图展示

下面是一个简单的PowerShell会话配置部署流程图:

graph TD;
    A[定义角色功能] --> B[定义会话配置];
    B --> C[使用DSC编译器部署];
    C --> D[验证配置];

这个流程图展示了从定义角色功能到最终验证配置的整个过程,帮助我们更清晰地理解部署步骤。

6.4 总结

通过以上案例,我们可以看到PowerShell会话配置和SDDL在实际应用中的重要性。合理的会话配置和权限管理可以提高系统的安全性和可管理性。在实际操作中,我们需要根据具体的需求和场景,灵活运用这些技术,确保系统的稳定运行。

同时,我们也需要注意一些细节,如SDDL的语法和控制标志,以及会话配置更新时可能出现的WinRM服务重启问题。通过不断的实践和学习,我们可以更好地掌握这些技术,为企业的IT管理提供有力的支持。

相关推荐

YOLO26算法星形目标识别+训练好的模型+100张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[星星(Star)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 85 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9950** mAP50-95 | 0.8477 Precision | 1.0000 Recall | 0.9954 train/box_loss | 0.8235 train/cls_loss | 0.7275 val/box_loss | 0.7248 val/cls_loss | 0.9621 【训练过程分析】 85 轮训练后,我们得到了一个 mAP50 为 0.9950 的模型,这真是让人惊喜的成绩。一开始,模型的训练过程进展非常迅速,loss 在前 20 轮内从 1.5000 下降到 1.0000 附近,此后,loss 依然保持稳步下降,但速度明显放缓,特别是在第 30 轮到第 50 轮之间,loss 曲线进入了一个平台期,大约在 0.85 附近徘徊了 10 轮,直到第 60 轮左右才再度加速下降。这样的表现说明模型在前期阶段收敛良好,但到了后期,确实需要更多的训练轮次以确保模型的稳定性。 在验证集上,val_loss 保持平稳,没有出现明显的波动,这进一步证明了模型没有过拟合。然而,我们注意到在第 80 轮和第 85 轮之间,val_loss 似乎有所微弱的反弹,尽管这种波动并不显著。在训练集上,前 50 轮训... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

国央企如何利用AI工具提升科技创新项目管理与成果转化能力?.docx

国央企如何利用AI工具提升科技创新项目管理与成果转化能力?

政府科技管理者在推动产学研合作时,如何高效识别和匹配重点产业所需的技术资源?.docx

政府科技管理者在推动产学研合作时,如何高效识别和匹配重点产业所需的技术资源?

融合高斯扰动与竞争学习的改进型多目标部落竞争与成员合作算法(IMOCTCM)求解DTLZ1-DTLZ7及-盘式制动器设计研究(Matlab代码实现)

内容概要:本文档名为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际内容并非聚焦于该主题,而是一份涵盖多个科研领域的Matlab/Simulink仿真资源汇总清单。文档列举了包括多目标优化算法(如IMOCTCM、MOWAA)、电力电子变换器控制(如LLC谐振变换器、DAB变换器)、电机控制(如PMSM无感控制)、状态估计(如卡尔曼滤波)、微电网调度、无人机路径规划、图像处理、信号处理等多个方向的仿真研究课题,涉及Matlab、Python、Simulink、PSCAD等多种工具和编程语言。文档末尾频繁出现“完整资源下载:公众号——荔枝科研社”及百度网盘链接,表明其核心用途是推广和分享一系列科研仿真资料,服务于学术交流与资源共享。; 适合人群:适用于电气工程、自动化、控制科学与工程、电力系统、电子信息、机械电子、计算机科学等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①为科研工作者提供丰富的Matlab/Simulink仿真案例参考和技术实现思路;②辅助高校师生完成课程设计、毕业设计或学术论文复现工作;③通过获取开源共享资源加速个人或团队的项目开发与算法验证进程。; 阅读建议:该文档属于资源目录性质,缺乏连贯的技术论述与逻辑结构,建议使用者根据自身研究方向筛选相关条目,结合提供的代码和模型进行学习与实践,并注意核实所下载资源的有效性、完整性以及代码运行环境的兼容性。

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文档详细介绍了一套针对储能双向Buck-Boost变换器的Simulink仿真资源,融合模型预测电流控制与电压下垂控制策略,适用于微电网及分布式能源系统中的能量管理与稳定控制。仿真模型全面呈现了双向Buck-Boost电路在储能系统充放电过程中的动态行为,重点引入模型预测控制(MPC)与下垂控制相结合的先进控制算法,有效提升了系统的响应速度、稳定性与鲁棒性。文档不仅提供了完整的仿真模型结构与参数设置,还附有详实的参考文献,便于使用者深入理解控制原理并开展理论延伸研究,是电力电子、新能源系统等领域科研与教学的重要实践资料。; 适合人群:电气工程、自动化、新能源等相关专业的硕士博士研究生、科研人员以及从事电力电子变换器与微电网系统设计的工程师。; 使用场景及目标:①用于微电网中储能系统的建模与协调控制策略研究;②开展模型预测控制(MPC)与电压下垂控制在直流变换器中的联合应用仿真分析;③支撑高校电力电子课程实验、毕业设计及科研项目开发,深化对双向DC-DC变换器非线性特性和先进控制算法实现机制的理解。; 阅读建议:建议结合Simulink仿真模型与配套文档同步学习,重点关注控制器的设计逻辑、参数整定方法及系统动态响应特性,推荐对比传统PI控制与先进控制策略的仿真结果,以深入掌握不同控制方案的性能差异与优化路径。

基于双向Buck-Boost电路的锂电池储能充电+放电控制Simulink仿真

内容概要:本文档围绕基于双向Buck-Boost电路的锂电池储能系统展开,详细介绍了其在充电与放电过程中的Simulink仿真设计与实现方法。通过构建双向Buck-Boost电路模型,结合模型预测电流控制与电压下垂控制策略,实现了对锂电池储能系统的高效能量管理与双向功率流动控制。文档提供了完整的仿真模型架构、控制算法设计流程、系统稳定性分析及动态响应性能验证,涵盖了从主电路建模到闭环控制参数整定的关键环节,适用于储能系统中能量双向变换的科研与工程实践。; 适合人群:具备电力电子、自动控制理论及新能源系统基础知识的高校研究生、科研人员以及从事储能系统、微电网、电动汽车等领域技术研发的工程技术人员。; 使用场景及目标:①用于锂电池储能系统的教学实验与科研仿真研究;②支撑微电网、电动汽车、V2G(Vehicle-to-Grid)等应用场景中的能量双向变换与功率调度研究;③深入理解Buck-Boost电路的工作原理及其在实际系统中的先进控制策略实现机制。; 阅读建议:建议在Simulink环境中实际搭建并调试所提供的仿真模型,重点关注控制环路的设计逻辑与参数整定过程,结合文中引用的参考文献深化对系统建模、控制理论与工程应用之间关系的理解。

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档围绕基于PSIM软件实现的三相维也纳(VIENNA)整流器展开,重点研究其电压电流双闭环控制系统与中点电位平衡控制策略。该仿真模型面向高效率、高功率因数的应用场景,详细构建了维也纳整流器的主电路结构及控制架构,涵盖电压外环与电流内环的双闭环PI控制器设计,以确保系统具备优良的动态响应与稳态性能。针对三电平拓扑中存在的中点电压偏移问题,引入空间矢量脉宽调制(SVPWM)技术进行优化调控,有效抑制中点电位波动,提升输出电压质量和系统运行稳定性。文档还配套提供了Mathcad计算书、仿真模型及相关参考资料,便于读者开展参数设计、控制逻辑分析与仿真复现工作。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员,以及从事新能源变换器、工业电源、电动汽车充电设施等领域的研发工程师和技术人员。; 使用场景及目标:①深入理解三相三电平维也纳整流器的工作原理与数学建模方法;②掌握电压电流双闭环控制系统的结构设计与PI参数整定技巧;③学习SVPWM在中点电位平衡控制中的实现机制与调制策略;④为高功率密度PFC整流器、充电桩前端电路、航空航天电源等高端电力电子装置的研发提供仿真验证平台与技术支撑。; 阅读建议:建议结合PSIM仿真环境动手实践,利用所提供的计算书和参考文献,重点剖析双闭环控制环路的动态特性与SVPWM调制逻辑,并通过改变负载条件、输入电压或系统参数等方式测试系统的鲁棒性与控制有效性,进一步深化对控制策略的理解与工程应用能力。

基于透镜天线阵列的毫米波大规模多输入多输出(MIMO)系统可靠波束空间信道估计研究(Matlab代码实现)

内容概要:本文围绕Plecs环境下全桥LLC谐振变换器的仿真模型展开研究,系统阐述了其在电力电子系统中的建模方法、控制策略及动态性能分析。文章详细介绍了LLC谐振变换器的工作原理与典型拓扑结构,基于Plecs仿真平台构建了高精度的系统模型,并对谐振参数设计、软开关实现条件、变频控制策略等关键技术进行了深入的仿真验证。研究进一步探讨了系统在不同负载与输入电压条件下的效率特性、动态响应及稳定性表现,充分展示了LLC变换器在实现高效率、高功率密度电源变换方面的显著优势和应用价值。; 适合人群:具备电力电子与电力系统基础知识,从事开关电源、新能源变换器设计、仿真与控制的研究生、工程师及科研人员。; 使用场景及目标:①作为全桥LLC谐振变换器的仿真教学与科研验证平台;②指导实际工程中LLC变换器的谐振腔参数设计与控制环路优化;③支撑高频高效AC-DC或DC-DC电源系统的开发与综合性能评估。; 阅读建议:建议读者结合Plecs软件动手实践,重点关注谐振参数设计与变频控制环路调试部分,通过对比仿真结果深入理解变换器的软开关实现机理、负载适应性及效率优化方法。

基于window的sftp上传工具(64位)

基于window的sftp上传工具,支持win7以上系统,支持局域网电脑之间文件传输。

独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)

内容概要:本文介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,聚焦于全桥LLC谐振变换器在电力电子系统中的建模与仿真研究。该资源提供了基于Plecs平台的高精度仿真模型,完整呈现了变换器的主电路拓扑、谐振参数设计、软开关实现机制及变频控制策略,能够有效支持对系统效率、动态响应与稳态性能的深入分析。模型充分体现了LLC谐振变换器在实现零电压开关(ZVS)、降低开关损耗和提升能量转换效率方面的优势,适用于新能源发电、储能系统及高效率电源设计等应用场景。; 适合人群:具备电力电子、自动控制及电路理论基础知识,从事电力电子变换器设计、新能源系统开发或相关领域研究的研究生、高校教师及工程技术人员。; 使用场景及目标:①用于全桥LLC谐振变换器的工作原理教学与参数设计实践;②支撑软开关特性、变频控制策略、效率优化等关键技术的仿真验证与性能评估;③作为科研项目、课程设计或毕业设计中电力电子系统仿真的核心参考模型,促进理论与工程实践的结合。; 阅读建议:建议使用者在掌握LLC谐振变换器基本工作原理的基础上,结合相关电力电子教材与Plecs软件操作指南,通过调整谐振元件参数、负载条件及控制策略进行多工况仿真,深入理解其工作机理与优化方法,并结合实验数据对比验证仿真结果的准确性。

PSIM-串联谐振半桥LLC开关电源+PFM变频闭环控制【仿真+计算书+参考文献】

内容概要:本文档围绕“PSIM-串联谐振半桥LLC开关电源+PFM变频闭环控制”展开,系统性地提供了基于PSIM仿真平台的半桥LLC谐振变换器完整技术资料,包括主电路建模、谐振参数设计、脉冲频率调制(PFM)变频控制策略及闭环反馈系统设计。重点阐述了LLC谐振变换器在宽负载范围内的高效软开关实现机制,涵盖谐振腔参数匹配、变频控制原理、系统稳定性分析、软启动策略及动态响应优化等内容,并配套提供仿真模型、详细计算书与参考文献,全面支持理论分析与工程实践的结合。; 适合人群:面向电力电子、电气工程及其自动化等相关领域的高校研究生、科研人员及从事高频开关电源研发的工程技术人员,尤其适合具备电路拓扑基础、控制理论及仿真能力的专业人士进一步深化对LLC变换器设计与闭环调控的理解。; 使用场景及目标:①用于高校课程设计或研究生实验教学,帮助学生掌握LLC谐振变换器的工作机理与PFM控制方法;②支撑科研项目中对高效率隔离型DC-DC变换器的建模与性能验证;③指导实际工程中半桥LLC电源的参数计算、控制环路设计与系统调试。; 阅读建议:建议结合所提供的PSIM仿真文件、数学计算书与参考文献同步研习,重点关注谐振元件(Lr、Cr、Lm)的参数设计过程与PFM闭环控制逻辑的实现细节,通过调整负载与输入条件进行仿真实验,深入理解系统效率、增益特性与稳定性的内在关系。

ddrc111111111111111111

ddrc1111111111111111111

状态估计【卡尔曼滤波kalman】UKF、EKF、粒子滤波PF学习与研究(Matlab代码实现)

内容概要:本文系统介绍了一套关于状态估计中卡尔曼滤波技术的学习与研究资源,聚焦于无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)和粒子滤波(PF)的核心原理及其Matlab代码实现。资源采用理论讲解与仿真实践相结合的方式,深入剖析非线性动态系统中的状态估计算法,涵盖滤波器的数学建模、适用条件、性能对比及实际应用中的关键问题。文档配套丰富的Matlab仿真案例,广泛涉及无人机姿态估计、传感器融合、电力电子系统状态监测、信号去噪与轨迹预测等多个工程与科研领域,展现出较强的实用性和可操作性,有助于读者构建完整的状态估计知识体系并快速应用于实际项目。; 适合人群:具备控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、电气工程、导航制导、机器人、信号处理等相关领域的技术研发人员。; 使用场景及目标:①深入理解UKF、EKF与PF在非线性系统状态估计中的算法机制、适用范围与优劣比较;②掌握基于Matlab/Simulink平台实现各类卡尔曼滤波算法的技术路径,并将其应用于无人机、智能传感、电力系统等实际场景的状态估计与数据融合任务;③为科研论文撰写、工程项目开发或算法优化提供可复用的代码模板与仿真验证框架。; 阅读建议:建议读者结合文档中的仿真模型循序渐进地学习,先夯实滤波算法的数学理论基础,再动手调试代码并进行参数敏感性分析,同时可将所学与其他技术(如机器学习、路径规划、传感器融合)结合,拓展其在复杂系统中的综合应用能力。

基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】​

内容概要:本文围绕Plecs全桥LLC谐振变换器的仿真模型展开,深入探讨了隔离型全桥LLC谐振变换器的工作原理、动态特性及其在高频高效电力电子变换中的应用。文章系统阐述了LLC谐振变换器的拓扑结构、工作模态划分及关键参数设计方法,并基于Plecs仿真平台构建了包含主电路、控制环路与负载变化的完整系统模型。通过在不同工况下进行仿真分析,验证了该模型在实现软开关、提升转换效率及优化动态响应方面的优异性能,为高频DC-DC变换器的设计与参数优化提供了坚实的仿真依据和技术支撑。; 适合人群:具备电力电子技术与电力系统基础知识,从事电源系统设计、新能源变换技术研究或相关领域开发工作的工程师及研究生。; 使用场景及目标:①用于高校教学与科研中对LLC谐振变换器工作原理的理解与实验验证;②指导实际工程中高频高效DC-DC变换器的参数设计与性能优化;③支持对软开关技术、谐振拓扑动态响应特性及效率优化策略的深入研究与技术改进。; 阅读建议:建议读者结合Plecs软件动手实践,逐步复现文中所述建模过程,并通过调整谐振电感、电容等关键参数观察系统行为的变化,以深化对LLC变换器运行机理的理解。同时可尝试将其拓展至其他谐振拓扑(如Series Resonant Converter、LCL等)的建模仿真,全面提升电力电子系统综合设计与分析能力。

免疫吸附柱行业分析:预计到2032年收入规模将接近57.36百万美元.pdf

免疫吸附柱行业分析:预计到2032年收入规模将接近57.36百万美元.pdf

全桥LLC谐振变化器参数设计资料(闭环仿真+参数设计报告)

内容概要:本文档系统性地介绍了全桥LLC谐振变换器的参数设计与闭环控制技术,涵盖隔离型全桥LLC谐振变换器的建模、变频与移相混合控制策略、软启动过程、恒压恒流双闭环控制等核心技术环节,并提供了完整的仿真模型、设计报告与计算书。资料基于Simulink/Plecs平台实现系统级仿真,包含2.5kW双向全桥LLC调频闭环设计实例及配套PPT说明,具备高度的工程实践价值。此外,文档融合了状态估计、扩展卡尔曼滤波(EKF)与神经网络(如BP、EKF+BP、PF)等先进算法在轨迹估计与参数优化中的应用,体现了电力电子与智能控制多学科交叉的技术趋势。; 适合人群:从事电力电子变换器、新能源电源系统、车载充电机、数据中心供电等领域研发的工程师,以及高校电气工程、自动化等相关专业的研究生,需具备扎实的电路理论基础和一定的仿真软件操作能力。; 使用场景及目标:① 掌握全桥LLC谐振变换器的关键参数设计方法与闭环控制系统构建流程;② 复现并优化典型拓扑的Simulink/Plecs仿真模型,提升实际工程项目开发效率;③ 结合状态估计算法与智能控制策略,提升系统动态响应与稳定性,拓展在高精度电源管理与智能电网中的研究与应用。; 阅读建议:建议按照文档目录结构循序渐进学习,优先研读核心设计报告与仿真模型,结合Mathcad计算书进行参数推导,并动手搭建与调试Simulink模型以深化理解;同时可参考所提供的MATLAB代码与参考文献,进一步开展算法融合与创新性研究。

锂电池防火箱行业分析:全球锂电池消防箱产量约为7.79万台.pdf

锂电池防火箱行业分析:全球锂电池消防箱产量约为7.79万台.pdf

招行收款通SM2加密解密全流程解析:PHP开发者必看

本文详细解析了招商银行收款通服务中SM2加密解密的完整流程,特别针对PHP开发者提供了从密钥管理到签名验签的实战指南。涵盖国密算法基础、PHP环境配置、密钥安全存储及生产环境优化方案,帮助开发者快速实现高安全性的支付系统集成。

weixin_30632089的博客 651

SAP OBYC自动过账全解析:从BSX到WRX的会计科目配置指南

本文深入解析SAP OBYC自动过账功能,从BSX到WRX的会计科目配置全流程,涵盖评估分组代码、事务码和评估类等核心概念。通过实战案例展示如何实现库存变动到财务过账的自动化流转,提升企业财务数据的准确性和效率。

weixin_29239279的博客 420

【S32K】S32K144入门笔记(4) Lin (Lin stack组件) 驱动超声波雷达实例

0. 引言 Lin这块是我一直没弄懂的部分。很多东西一知半解,当时感觉是硬凑了答案出来。 果然过标的时候出了问题,几个小伙伴帮忙一起刷夜也没搞定,好在标还是顺利过了,不然罪过大了。 之前做lin这块一直用的是linStack组件,这部分包含了协议栈部分,需要对lin的协议比较清楚和理解才好配置。 尤其是,图形界面配置完成后会生成一个ldf文件,这个文件很重要,所有的代码都是基于这个文件生成的,但是这个文件我确认没找到什么介绍资料,所以很多配置都是一点一点凑出来的,再实际验证的。 抓住这次写文档的机会,把当时

YoYo的桃子树 1万+

解决fetch_california_housing数据集403错误的三种实用方法

本文针对机器学习初学者加载fetch_california_housing数据集时常见的HTTPError 403: Forbidden错误,提供了三种经过实测的解决方案。详细介绍了手动下载与本地替换、修改源码下载路径以及配置网络访问策略的具体步骤,帮助用户根据自身网络环境和开发场景选择最佳方法,确保数据集顺利加载。

weixin_29074295的博客 550

Ubuntu 24.04下Loki+Alloy+Grafana日志分析系统的快速部署与实践

本文详细介绍了在Ubuntu 24.04系统上快速部署Loki+Alloy+Grafana轻量级日志分析系统的完整流程。通过二进制安装Loki、配置Alloy采集器以及设置Grafana可视化界面,构建了一套资源消耗低、易于管理的日志解决方案,并实战演示了如何采集和分析网络设备日志,特别适合资源有限的中小团队或边缘计算场景。

tensor9flow的博客 235

深入详解DICOM医学影像定位线相关知识:理解定位线的概念、定位线的作用以及定位线显示和计算原理

深入详解DICOM医学影像定位线相关知识:理解定位线的概念、定位线的作用以及定位线显示和计算原理

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 2052

深度学习-176-知识图谱技术之langchain与neo4j的嵌入向量Neo4jVector

使用Neo4jVector将输入的文档向量化,并创建向量索引,然后进行语义检索。

qq_20466211的博客 440

【AI大模型:架构实战】31、工业级AI大模型系统全景解析:从架构设计到提示语引擎实践

本文系统解析了工业级AI大模型的核心架构与技术体系。整体采用分层解耦设计,包含数据工程、模型训练、模型部署、应用集成和监控运维五大核心模块,以及分布式计算、高速网络、异构硬件三大支撑体系。数据工程构建高质量数据处理流水线;模型训练实现从预训练到业务适配的全流程;模型部署优化服务性能与可用性;应用集成连接业务场景;监控运维保障系统持续优化。三大支撑能力专注于千亿参数管理、高并发低延迟处理和持续学习进化。该架构设计既满足当前需求,又为技术演进预留空间,为企业在数字化转型中提供AI工业化落地的完整解决方案。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1990

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 2、深入了解 Ubuntu:从起源到应用
下一篇: 16、容器部署与安全配置全攻略
time3
博客等级 码龄20年 55粉丝 1482原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值