powersheel远程链接密码加密链接高级玩法javascript
ConvertTo-SecureString 和 ConvertFrom-SecureString 命令都支持选项 -Key。在处理密码时经过使用 Key 选项能够提供额外的安全性,而且容许在不一样的环境中使用密码文件。
java
先生成 32 位的 Key 并保存在文件 aes.key 中:web
$keyFile = "C:\powersheel\aes.key" #加密的key准备放在这个D盘,最好放在一个文件夹里面 $key = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($key) $key | out-file $keyFile
使用 Key 生成并保存密码文件:windows
Read-Host "Enter Password" -AsSecureString | ConvertFrom-SecureString -key $key | Out-File "C:\powersheel\pwd.txt"
使用密码文件建立和 Key 文件建立 Credential 信息:后端
$userName = "YourUserName" $passwdFile = "C:\powersheel\pwd.txt" $keyFile = "C:\powersheel\aes.key" $key = Get-Content $keyFile $Cred = New-Object -TypeName System.Management.Automation.PSCredential ` -ArgumentList $userName, (Get-Content $passwdFile | ConvertTo-SecureString -Key $key)
经过这种方法,把 pwd.txt 和 aes.key 文件拷贝到其它的机器上也是能够工做的。可是咱们须要额外维护一个 key 文件的安全,这通常经过设置文件的访问权限就能够了。安全
$userName = "administrator" $passwdFile = "C:\powersheel\pwd.txt" $keyFile = "C:\powersheel\AES.key" $key = Get-Content $keyFile $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $userName, (Get-Content $passwdFile | ConvertTo-SecureString -Key $key) $remoteServer='www.bai.com' #链接方法 function connRemoteSever { #链接远程服务器 Param ($remoteServer,$cred) #$passwordSecure = ConvertTo-SecureString $pwd -AsPlainText -Force #$cred = New-Object pscredential($userName, $passwordSecure) Write-Host '-----------powersheel默认Port是598五、5986-----------' $mySession = New-PSSession -ComputerName $remoteServer -Port 55985 -Credential $cred return $mySession } #链接到远程服务器 $webSession=connRemoteSever $remoteServer $cred Invoke-Command -Session $webSession -ScriptBlock { dir d: Write-Host '-----------1.在覆盖网站内容前,先中止网站-----------' #Import-Module WebAdministration; Stop-WebAppPool -Name "$appPoolName" #Import-Module WebAdministration; Stop-WebSite -Name "$appWebSiteName" Write-Host '-----------2.备份IIS中绩效的网站-----------' #Copy-Item -Path "D:\web\kpi_dev" "D:\web\Backup\kpi_dev_$backtime" -Recurse -Force Write-Host '-----------3.删除IIS绩效后端-----------' #Remove-Item -Path $DelFilePath -Recurse -Force Write-Host '-----------4.复制最新绩效后端到IIS发布的文件夹-----------' #Copy-Item -Path "D:\web\WebFTP\publish_kpi_BackEnd_dev\$banben\*" "D:\web\kpi_dev\BackEnd\" -Recurse -Force Write-Host '-----------5.复制web.config到IIS发布的文件夹-----------' #Copy-Item -Path "D:\web\kpi_dev\web.config" "D:\web\kpi_dev\BackEnd\" -Recurse -Force Write-Host '-----------6.启动网站-----------' #Import-Module WebAdministration; Start-WebAppPool -Name "$appPoolName" #Import-Module WebAdministration; Start-WebSite -Name "$appWebSiteName" }
$userName = 'opsadmin' $pwd = 'ywX*' $remoteServer='192.168.0.100' function connRemoteSever { # 链接远程服务器 Param ($userName,$pwd,$remoteServer,$port) #参数 $passwordSecure = ConvertTo-SecureString $pwd -AsPlainText -Force $cred = New-Object pscredential($userName, $passwordSecure) $mySession = New-PSSession -ComputerName $remoteServer -Port 5985 -Credential $cred return $mySession } # 链接到远程服务器 $webSession=connRemoteSever $pwd $userName $remoteServer $banben='V'+$env:BUILD_NUMBER #这边是在windows中的jenkins中使用到的 $backtime=Get-Date -Format 'yyyy_M_d_Hms' $DelFilePath='D:\web\kpi_dev\BackEnd\*' $DelFileExcludePath='D:\web\kpi_dev\BackEnd\wwwroot*' $appPoolName='kpi_dev' $appWebSiteName='kpi_dev' Invoke-Command -Session $webSession -ScriptBlock { param($appPoolName,$appWebSiteName,$backtime,$DelFilePath,$banben) #如下都是一些操做都是一些基本操做命令,你们有用到的话借鉴下 dir d: Write-Host '-----------1.在覆盖网站内容前,先中止网站-----------' #Import-Module WebAdministration; Stop-WebAppPool -Name "$appPoolName" #Import-Module WebAdministration; Stop-WebSite -Name "$appWebSiteName" Write-Host '-----------2.备份IIS中绩效的网站-----------' #Copy-Item -Path "D:\web\kpi_dev" "D:\web\Backup\kpi_dev_$backtime" -Recurse -Force Write-Host '-----------3.删除D:\web\kpi_dev\BackEnd 文件夹下除了wwwroot文件夹,其余的全删除-----------' #Remove-Item -Path $DelFilePath -Recurse -Force Get-ChildItem -Path $DelFilePath -Recurse -exclude wwwroot | Select -ExpandProperty FullName | Where {$_ -notlike $DelFileExcludePath} | sort length -Descending | Remove-Item -force Write-Host '-----------4.复制最新绩效后端到IIS发布的文件夹-----------' #Copy-Item -Path "D:\web\WebFTP\publish_kpi_BackEnd_dev\$banben\*" "D:\web\kpi_dev\BackEnd\" -Recurse -Force Write-Host '-----------5.复制web.config到IIS发布的文件夹-----------' #Copy-Item -Path "D:\web\kpi_dev\web.config" "D:\web\kpi_dev\BackEnd\" -Recurse -Force Write-Host '-----------6.启动网站-----------' #Import-Module WebAdministration; Start-WebAppPool -Name "$appPoolName" #Import-Module WebAdministration; Start-WebSite -Name "$appWebSiteName" } -ArgumentList $appPoolName,$appWebSiteName,$backtime,$DelFilePath,$banben
$Username = 'opsadmin' #远程电脑的用户名 $Password = 'ywX*^R' #远程电脑的密码 $pass = ConvertTo-SecureString -AsPlainText $Password -Force $Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass Invoke-Command -ComputerName 192.168.0.100 -Port 5985 -ScriptBlock { dir D:\web\Backup #查看当前远程服务器这个文件夹下得目录列表状况 } -credential $Cred