分类 分享 下的文章

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;


Delphi 获取系统版本{2K~10}

Function RtlGetVersion(Var lpOsInfo :TOSVersionInfoExW):DWORD; Stdcall; External 'ntdll.dll';
//GetVersionEx 在Win8以后的的版本会以兼容模式来获取结果导致获取到的NT内核版本都是6.2所以这里用RtlGetVersion
Function GetOs():Byte;
  Const
    SM_SERVERR2 = 89;
Var
  OSINFO: TOSVersionInfoExW;
begin
  Result := 255;
  OSINFO.dwOSVersionInfoSize := SizeOf(TOSVersionInfoExW);
  if RtlGetVersion(OSINFO) = 0 then
  begin
    if (OSINFO.dwMajorVersion = 5) and (OSINFO.dwMinorVersion = 0) then
      Result := 1//'Windows 2000'
    else if (OSINFO.dwMajorVersion = 5) and (OSINFO.dwMinorVersion = 1) then
      Result := 2//'Windows XP'
    else if (OSINFO.dwMajorVersion = 5) and (OSINFO.dwMinorVersion = 2) and (GetSystemMetrics(SM_SERVERR2) = 0) then
      Result := 3//'Windows Server 2003'
    else if (OSINFO.dwMajorVersion = 5) and (OSINFO.dwMinorVersion = 2) and (GetSystemMetrics(SM_SERVERR2) <> 0) then
      Result := 4//'Windows Server 2003 R2'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 0) and (OSINFO.wProductType = VER_NT_WORKSTATION) then
      Result := 5//'Windows Vista'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 0) and (OSINFO.wProductType <> VER_NT_WORKSTATION) then
      Result := 6//'Windows Server 2008'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 1) and (OSINFO.wProductType <> VER_NT_WORKSTATION) then
      Result := 7//'Windows Server 2008 R2'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 1) and (OSINFO.wProductType = VER_NT_WORKSTATION) then
      Result := 8//'Windows 7'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 2) and (OSINFO.wProductType = VER_NT_WORKSTATION) then
      Result := 9//'Windows 8'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 2) and (OSINFO.wProductType <> VER_NT_WORKSTATION) then
      Result := 10//'Windows Server 2012'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 3) and (OSINFO.wProductType = VER_NT_WORKSTATION) then
      Result := 11//'Windows 8.1'
    else if (OSINFO.dwMajorVersion = 6) and (OSINFO.dwMinorVersion = 3) and (OSINFO.wProductType <> VER_NT_WORKSTATION) then
      Result := 12//'Windows Server 2012 R2'
    else if (OSINFO.dwMajorVersion = 10) and (OSINFO.dwMinorVersion = 0) and (OSINFO.wProductType = VER_NT_WORKSTATION) then
      Result := 13//'Windows 10'
    else if (OSINFO.dwMajorVersion = 10) and (OSINFO.dwMinorVersion = 0) and (OSINFO.wProductType <> VER_NT_WORKSTATION) then
      Result := 14//'Windows Server 2016 Technical Preview'
    else
      Result := 255;
  end;
end;