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

[玩转系统] 使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分

作者:精品下载站 日期:2024-12-14 07:11:57 浏览:14 分类:玩电脑

使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分


使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分

前言:本文提到的所有信息均基于ISE的profile文件,有关profile文件的更多信息请查看微软的说明

要快速生成 ISE 配置文件,您可以在 ISE 中使用以下代码

if (!(Test-Path -Path $PROFILE )) 
{ New-Item -Type File -Path $PROFILE -Force }

您的个人文档文件夹中将生成一个新文件夹和 .ps1 文件。

[玩转系统] 使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分

就我个人而言,我已经使用这个配置文件有一段时间了,但是这些天它不断发展并且添加了很多功能。

我对这个文件所做的第一件事就是从我的个人资料中的 ISE Steroids 开始。看一下这个简单的配置文件:

[玩转系统] 使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分

更多信息链接

今年夏天,我再次开始使用 ISE Profile,以自动执行对服务器等的远程 powershell 访问。

直接看我的帖子LINK

1. 使用配置文件备份插件

#add ise menu backupprofil
$parentbackup = $psise.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add('Backup', $null, $null)
$parentbackup.Submenus.Add(' BackupPSProfile',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\Backup\profile-backup.ps1"}, $null) | Out-Null

仔细看看函数 add 及其三个参数 在我的示例中,最后两个参数是 $null 因为我不想要定义一个快捷方式。

添加此信息后,您在 ISE 中的菜单将得到扩展(如果直接执行,菜单结构将出现在菜单中)。

那么为什么我们要执行附加菜单 -> 我想使用配置文件备份我的完整配置文件路径,并且还具有此配置文件文件夹的版本,文件夹名称中包含日期。就我而言,targetbackup 是我的 onedrive 文件夹,它将上传到云端。

这个脚本看起来如何:

#path to profile file
$updatepath  = 'C:\Users\ak\Documents\WindowsPowerShell'
#path to backupfolder
$backuppath= "C:\OneDrive\powershell-scripting\powershell_profile"
#get date and convert to string
$date=((Get-Date).ToString('yyyy-MM-dd-HH-mm-ss'))
#generate new folder with date in foldername
New-Item -Path  ($backuppath+"\"+$date) -type directory -Force
#if folder not existing throw error
if( -not (Test-Path ($backuppath+"\"+$date)) )
{
   Throw (Logwrite "error generating folder, please check folder")
}
#starting backup with robocopy 
else {
    $backuponedrive = "$backuppath"+"\"+"$date"
    robocopy "$updatepath" "$backuponedrive" /mir 
    }

2.远程Powershell Azure AD

当然,其他脚本也遵循我的个人资料。现在我介绍一个通过远程powershell连接到Azure AD Powershell的脚本(还包括导入模块)

首先将菜单按钮添加到“RemotePowershell”

[玩转系统] 使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分

连接脚本:

#connect azure ad 
Import-Module AzureAD -Verbose
Update-Module -Name AzureAD -Verbose
Get-Module -Name AzureAD
$MyCred = Get-Credential
Connect-AzureAD -Credential $MyCred
$user = ($MyCred.UserName).ToString()
#change ISE Editor title 
$host.ui.RawUI.WindowTitle = "Remoteconnection to AzureAD with user: $user"

[玩转系统] 使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分

注意:ISE 的标题栏也是自定义的,并显示用于连接到 azure 广告的用户

3. 关闭远程 Powershell 会话

使用 Remotepowershell 完成所有工作后,您应该关闭与远程服务器的连接(干净关闭)。我还在“remotepowershell”中创建了一个菜单按钮

[玩转系统] 使用 ISE 作为中央管理工具(ISE 配置文件的演变)第 1 部分

以下脚本位于按钮后面

#exit open powershell session
Get-PSSession | Where-Object {$_.State -eq "Opened"} | Remove-PSSession
$host.ui.RawUI.WindowTitle = "Windows Powershell ISE no connection"

如您所见,远程会话将被删除,并且标题栏将被自定义,以便每个人都可以看到没有活动的远程连接。

有多种方法可以结束远程 powershell 会话(此处有简短说明):

  1. Powershell 将会话连接到远程服务器/系统并在本地会话中导入模块(变量也仅在本地系统上定义)
  2. 第二种方法称为“隐式远程处理”,它直接在远程客户端/系统上执行 powershell 代码(因此,如果您导入模块,它将不会在本地导入)

在我的示例中,“Remove-PSSession”是结束 PSSession(第一个 ps 连接),“Exit-RemotePS”是结束隐式会话

退出-RemotePS:

$parentrps.Submenus.Add(' Exit-RemotePS',{ Invoke-Expression Exit-PSSession; $host.ui.RawUI.WindowTitle = "Windows Powershell ISE no remote connection" }, $null) | Out-Null

通过使用“invoke-expression”,可以在远程计算机或服务器上执行 powershell 代码。 (缺点:需要winrs)。也可以使用“Invoke-Command”,但如果这样做,则需要考虑更多参数。

查看此链接:Invoke-Expression VS Invoke-Command

最后是我的完整配置文件:

#startup ISE-Steroids
Set-Location C:\temp
if ($psISE)
{
  Start-Steroids
  #Clear-Host
  Write-Host 'ISE-Steriods started!' -ForegroundColor Green
  #check for updates and install 
  Update-Module -Name isesteroids
}


#add ise menu remote powershell
$parentrps = $psise.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add('RemotePowershell', $null, $null) 
$parentrps.Submenus.Add(' Open-ExchangeOnline',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\RemotePS\ExchangeOnline.ps1"}, $null) | Out-Null
$parentrps.Submenus.Add(' Azure-ADConnect',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\RemotePS\azure-ad-connect.ps1"}, $null) | Out-Null
$parentrps.Submenus.Add(' Remove-PSSession',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\RemotePS\ExchangeOnline-exit.ps1"}, $null) | Out-Null
$parentrps.Submenus.Add(' Exit-RemotePS',{ Invoke-Expression Exit-PSSession; $host.ui.RawUI.WindowTitle = "Windows Powershell ISE no remote connection" }, $null) | Out-Null
#add ise menu backupprofil
$parentbackup = $psise.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add('Backup', $null, $null)
$parentbackup.Submenus.Add(' BackupPSProfile',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\Backup\profile-backup.ps1"}, $null) | Out-Null

这是第一部分。

第二部分将描述函数日志记录和 certman,并将很快发布。

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

取消回复欢迎 发表评论:

关灯