分类 分享 下的文章

PowerShell学习笔记(二) 通过远程执行命令

#启用远程 忽略网络类型 所有提示全Yes
Enable-PSRemoting -SkipNetworkProfileCheck -Force
#允许所有连入连接 PS:2端都需要执行
Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force


#新建Session
$Session = (Get-Credential)
#连接到虚拟机
$Connect = New-PSSession -ComputerName 192.168.1.2 -Credential $Session
#通过ICM执行CMD命令
ICM $Connect {ping qq.com}
#删除连接
Remove-PSSession -Session $Connect


PowerShell管理Hyper-V虚拟机学习笔记(一)

#新建虚拟机
#新建一个名称为Test 内存1G 硬盘大小为40Gb的一代Hyper-V虚拟机
$VM = New-VM –Name "Test" –MemoryStartupBytes 1GB -Generation 1 -NewVHDPath "D:\VM\Test.vhdx" -NewVHDSizeBytes 40GB
#设置虚拟机CPU为2核心
$VM | Set-VM -ProcessorCount 2 
#关闭虚脱机动态内存
$VM | Set-VMMemory -DynamicMemoryEnabled $False
#删除原有网卡
$VM | Remove-VMNetworkAdapter
#添加一个名称为 内网网卡 虚拟交换机为 VM_Lan 的网卡
$VM | Add-VMnetworkAdapter -Name "内网网卡" -SwitchName "VM_Lan"
#启用Vlan
$VM | Set-VMNetworkAdapterVlan –Access –VlanId 2
#添加一个名称为 外网网卡 虚拟交换机为 VM_Wan 的网卡
$VM | Add-VMnetworkAdapter -Name "外网网卡" -SwitchName "VM_Wan"


#查找已运行的虚拟机且名字包含Av_
$List = Get-VM | Where-Object {$_.State –eq 'Running'} | Where-Object {$_.Name -like 'AV_*'}

#启用联网网卡
foreach($I in $List) {
  Connect-VMNetworkAdapter -VMName $I.VMName -Name "外网网卡" -SwitchName "Wan"
}

#禁用联网网卡
foreach($I in $List) {
  Disconnect-VMNetworkAdapter -VMName $I.VMName -Name "外网网卡"
}

#删除所有已关机状态的虚拟机网卡
foreach($I in $List) {
    Remove-VMNetworkAdapter $I
}

#添加指定模式的双网卡
foreach($I in $List) {
    Add-VMnetworkAdapter $I -Name "内网网卡" -SwitchName "VM_Lan" 
    Set-VMNetworkAdapterVlan $I –Access –VlanId 2
    Add-VMnetworkAdapter $I -Name "外网网卡" -SwitchName "VM_Wan"
}

#启动虚拟机
$List = Get-VM | Where-Object {$_.State –eq 'Off'} | Where-Object {$_.Name -like 'AV_*'}
foreach($I in $List) {
    Start-VM -Name $I.VMName
}

#关闭虚拟机
$List = Get-VM | Where-Object {$_.State –eq 'Running'} | Where-Object {$_.Name -like 'AV_*'}
foreach($I in $List) {
    Stop-VM -Name $I.VMName
}


ListView高速添加数据

Type //定义个
  PFileListItem = ^TFileListItem;
  TFileListItem = Record
    szName :String;
    szSize :String;
  End;

Var //来个变量
  FFileItemList  :TList;

Procedure ClearItemList();
Var //清空链表
  I :Integer;
begin
  For I := 0 to FFileItemList.Count-1 do
  begin //释放New出来的内存但是注意 Dispose不会直接把内存还给系统而且等待下一次New调用
    Dispose(PFileListItem(FFileItemList[I]));
  end;
  FFileItemList.Clear;
end;

//添加 ListView Data事件 并将ListView的 OwnerData 属性设置为 True
Procedure TForm.ListViewData(Sender: TObject; Item: TListItem);
begin
  With PFileListItem(FFileItemList[Item.Index])^ do
  begin
    Item.Caption := szName;
    Item.SubItems.Add(szSize);
  end;
end;

//添加数据的时候

Var
  pFileItem  :PFileListItem;
  I          :Integer;
Begin
  ClearItemList();
  
  LockWindowUpdate(ListView.Handle); //通过句柄锁住ListView防止刷新
  
  For I := 0 To 102400 Do
  Begin
    pFileItem := New(PFileListItem);
    pFileItem.szName := '这是文件名';
    pFileItem.szSize := '1024Kb';
    
    FFileItemList.Add(pFileItem); //添加到链表
  End;
  
  ListView_File.Items.Count := FFileItemList.Count;

  LockWindowUpdate(0); //解锁
End;