凭证对象(PSCredential)是一个 PowerShell 类型,用于安全地存储和传递用户名和密码等凭证信息。它在需要身份验证的场景中广泛使用,特别是在脚本自动化和远程操作中。
PSCredential 对象包含两个主要部分:
- 用户名:一个字符串,表示用户的名称或账户。
- 密码:一个 SecureString 对象,用于安全存储用户的密码。
使用 PSCredential 对象的场景
- 远程连接:在使用 PowerShell 远程管理功能(如 Enter-PSSession 或 Invoke-Command)时提供凭证。
- 访问安全资源:如访问共享文件、数据库或其他需要认证的服务。
- 自动化脚本:在脚本中自动执行需要身份验证的任务,而不需要用户每次输入凭证。
SecureString:PSCredential 对象的密码部分使用 SecureString 类型,避免明文密码 确保密码在内存中是加密的,减少了泄露的风险。
凭证对象与访问令牌的关系?
- 凭证对象:用于最初的身份验证步骤,例如在脚本中自动登录到某个服务或系统。
- 访问令牌:通常在身份验证成功后,由身份提供者生成并颁发,随后用于授权访问特定资源。
通过 PowerShell 的New-Object System.Management.Automation.PSCredential
创建,使用用户名和密码。
凭证对象:用于需要用户认证的场景,例如连接远程计算机、访问共享资源、执行需要权限的操作。
访问令牌:用于授权用户访问API、Web服务或其他受保护资源。令牌在每次请求时传递给资源服务器以验证用户的访问权限
创建凭证对象
凭证对象,通过 PowerShell 的 New-Object System.Management.Automation.PSCredential
创建,使用用户名和密码。
$pass = ConvertTo-SecureString “W3_4R3_th3_f0rce.” -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential(“ACUTE\imonks”, $pass)
Enter-PSSession -ComputerName ATSSERVER -Credential $cred #连接
使用 PSCredential 对象进行远程连接
1. 使用 Enter-PSSession
Enter-PSSession
命令用于建立与远程计算机的交互式会话,类似于 SSH 的效果。
powershell复制代码Enter-PSSession -ComputerName RemoteServer01 -Credential $credential
执行该命令后,PowerShell 会话将切换到远程计算机,可以在其中交互式地执行命令。要退出远程会话,可以使用 Exit-PSSession
。
2.使用 Invoke-Command
Invoke-Command
命令用于在一个或多个远程计算机上执行命令或脚本块。
Invoke-Command -ComputerName RemoteServer01 -Credential $credential -ScriptBlock {
# 在远程计算机上执行的命令 Get-Process}
3. 访问远程文件共享
通过凭证对象访问远程文件共享或其他资源。
$remotePath = "\\RemoteServer01\SharedFolder"
New-PSDrive -Name Z -PSProvider FileSystem -Root $remotePath -Credential $credential
# 访问映射的驱动器
Get-ChildItem Z:
一整个流程
# 将明文密码转换为 SecureString
$password = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
# 创建 PSCredential 对象
$credential = New-Object System.Management.Automation.PSCredential("ACUTE\imonks", $password)
# 使用 Enter-PSSession 进行远程连接
Enter-PSSession -ComputerName RemoteServer01 -Credential $credential
# 在远程会话中执行命令
Get-Process
# 退出远程会话
Exit-PSSession
# 使用 Invoke-Command 在远程计算机上执行命令
Invoke-Command -ComputerName RemoteServer01 -Credential $credential -ScriptBlock {
Get-Service
}