当前位置:  操作系统/服务器>windows
本页文章导读:
    ▪PowerShell入门(十一):编写脚本模块        现在通过编写模块就可以在PowerShell命令行或者脚本中管理大型、分布式软件系统,就像Exchange Server和SharePoint Server正在做的那样。你有这样的需求吗?模块、脚本模块  模块是PowerShell V.........
    ▪WM_TIMER,MessageBox与消息循环      在阅读本文内容之前,请首先查看下面的代码,猜猜程序的运行效果是下面两种结果中的哪一个?程序运行1秒后,弹出消息框。如果不关闭该消息框,程序将不会有任何变化;直到用户关闭.........
    ▪优化Windows7,让系统运行更流畅       1、加速磁盘碎片整理—–定位并合并本地卷中的碎片文件以提高系统性能:/A 在指定的卷上执行分析。/C 在所有卷上执行该操作。/E 在除了指定卷以外的所有卷上执行该操作。/H 以.........

[1]PowerShell入门(十一):编写脚本模块
    来源:    发布时间: 2013-10-20

  现在通过编写模块就可以在PowerShell命令行或者脚本中管理大型、分布式软件系统,就像Exchange Server和SharePoint Server正在做的那样。你有这样的需求吗?

模块、脚本模块

  模块是PowerShell V2中引入的概念,用以改进之前提出的“管理单元”。将管理单元也作为模块(二进制模块)处理之后,PowerShell中就包括两种模块——脚本模块和二进制模块。那么什么是模块呢?模块就是包含一些PowerShell命令、项的程序包,它以一个整体被分发共享和加载使用。

  脚本模块是在PowerShell V2中与模块一起提出的概念,它完全由PowerShell语法和环境编写,不需要切换到其他编译语言或者开发环境。脚本模块是现在编写PowerShell模块时推荐的方法,要好好学哦。

编写脚本模块

  编写脚本模块包括确定模块路径、创建模块文件夹、编写模块文件和编写Manifest文件等几个方面,都非常容易操作,具体内容如下:

模块安装路径

  理论上,模块可以放在本机的任何位置,但是如果放在Env:\PSModulePath搜索范围内,将会更加便于管理和使用。Env:\PSModulePath是与系统变量%Path%具有相同建模方式的变量,其变量值是由逗号分隔的路径组成的字符串。虽然env:PSModulePath变量中有系统预定义的两个目录,但他们可能并未创建,需要在使用的时候创建。

  可以用以下命令获得两个路径:

PS C:\Users\luke> $paths = (dir Env:\PSModulePath).Value.Split(";")
PS C:\Users\luke> $paths
C:\Users\luke\Documents\WindowsPowerShell\Modules
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\


检查路径是否已经创建可以用如下命令:

PS C:\Users\luke> Test-Path -Path $paths[0]
False

以上返回False,则表示路径未创建。创建路径可使用文件浏览器、Cmd命令或者PowerShell命令。这里使用PowerShell命令如下:

New-Item -Path $paths[0] -ItemType directory  -Force

这样放置模块所需要的路径就创建好了,可以进行下一步了。

模块文件夹

  模块文件夹是模块的一个组成部分,要与模块具有相同的名字。模块所包含的模块文件、描述文件以及其他可能用到的脚本文件都要放在这个文件夹中。例如本文需要创建模块ModuleDemo1,可以使用上述的new-item命令或者切换到脚本路径之后使用md命令,即md ModuleDemo1。

脚本模块文件

  脚本模块文件与一般的脚本文件内容相似,只是后缀是.psm1而非.ps1,其文件名就是模块的名字。不过,一般来说模块中应该只包含函数、别名、变量等的定义,不应进行很多操作或者输出。ModuleDemo1.psm1的简单示例如下:

function Greet([String] name)
{
"Hello $name"
}

模块描述文件

  描述文件也称为Manifest文件,扩展名是.psd1,它的文件名也要与模块相同。它的内容实际上是一个Hashtable;不同的是,这个Hashtable中键的名字是系统预先定义的。脚本模块文件的作用主要是限制运行环境、设置依赖项和对脚本进行一些描述。

  创建和编辑模块描述文件可以使用任何文本编辑器,但首次使用推荐使用命令进行。创建模块描述文件的命令如下:

PS C:\Users\luke\Documents\WindowsPowerShell\Modules\ModuleDemo1> New-ModuleManifest -Path .\ModuleDemo1.psd1

cmdlet New-ModuleManifest at command pipeline position 1
Supply values for the following parameters:
NestedModules[0]:
Author: Luke Zhang
CompanyName: CaiJu
Copyright:
ModuleToProcess: ModuleDemo1
Description: Demo1
TypesToProcess[0]:
FormatsToProcess[0]:
RequiredAssemblies[0]:
FileList[0]:

这样模块描述文件就创建好了,详细信息可以打开文件编辑。

使用脚本模块

  脚本模块编写好以后就可以使用了,加载使用脚本模块文件主要利用Get-Module命令和Import-Module命令。执行如下命令就能显示出我们刚刚编写的模块:

PS D:\> Get-Module -ListAvailable

ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest ModuleDemo1 {}
Manifest ADRMS {}
Manifest AppLocker {}
Manifest BestPractices {}
Manifest BitsTransfer {}
Manifest PSDiagnostics {}
Manifest ServerManager {}
Manifest TroubleshootingPack {}
Manifest WebAdministration {}

然后导入我们刚刚编写的模块:

PS D:\> Import-Module -Name ModuleDemo1

导入之后,模块中定义的Geet函数就可以使用了:

PS D:\> Greet "Luke"
Hello Luke

如果模块中还定义了其他别名、变量等,也都可以使用。

结语

  模块不但是大型软件脚本化管理的高效解决方案,也是共享PowerShell命令的好办法。它是PowerShell程序员为数不多的展示工作成果的方式之一,而且是其中最专业化的方式。所以,学好模块,向领导交代。

本文链接


    
[2]WM_TIMER,MessageBox与消息循环
    来源:    发布时间: 2013-10-20

在阅读本文内容之前,请首先查看下面的代码,猜猜程序的运行效果是下面两种结果中的哪一个?

  • 程序运行1秒后,弹出消息框。如果不关闭该消息框,程序将不会有任何变化;直到用户关闭该消息框后,才会弹出后续WM_TIMER对应的消息框;
  • 程序运行后,每隔1秒弹出消息框(不管用户是否关闭之前已弹出的消息框)
  • 1 // Timer.cpp : Defines the entry point for the application.
    2 //
    3
    4 #include "stdafx.h"
    5 #include "Timer.h"
    6
    7 #define MAX_LOADSTRING 100
    8
    9 // Global Variables:
    10 HINSTANCE hInst; // current instance
    11 TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    12 TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
    13
    14 // Forward declarations of functions included in this code module:
    15 ATOM MyRegisterClass(HINSTANCE hInstance);
    16 BOOL InitInstance(HINSTANCE, int);
    17 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    18 INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
    19
    20 int APIENTRY _tWinMain(HINSTANCE hInstance,
    21 HINSTANCE hPrevInstance,
    22 LPTSTR lpCmdLine,
    23 int nCmdShow)
    24 {
    25 UNREFERENCED_PARAMETER(hPrevInstance);
    26 UNREFERENCED_PARAMETER(lpCmdLine);
    27
    28 // TODO: Place code here.
    29 MSG msg;
    30 HACCEL hAccelTable;
    31
    32 // Initialize global strings
    33 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    34 LoadString(hInstance, IDC_TIMER, szWindowClass, MAX_LOADSTRING);
    35 MyRegisterClass(hInstance);
    36
    37 // Perform application initialization:
    38 if (!InitInstance (hInstance, nCmdShow))
    39 {
    40 return FALSE;
    41 }
    42
    43 hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TIMER));
    44
    45 // Main message loop:
    46 while (GetMessage(&msg, NULL, 0, 0))
    47 {
    48 if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    49 {
    50 TranslateMessage(&msg);
    51 DispatchMessage(&msg);
    52 }
    53 }
    54
    55 return (int) msg.wParam;
    56 }
    57
    58
    59
    60 //
    61 // FUNCTION: MyRegisterClass()
    62 //
    63 // PURPOSE: Registers the window class.
    64 //
    65 // COMMENTS:
    66 //
    67 // This function and its usage are only necessary if you want this code
    68 // to be compatible with Win32 systems prior to the 'RegisterClassEx'
    69 // function that was added to Windows 95. It is important to call this function
    70 // so that the application will get 'well formed' small icons associated
    71 // with it.
    72 //
    73 ATOM MyRegisterClass(HINSTANCE hInstance)
    74 {
    75 WNDCLASSEX wcex;
    76
    77 wcex.cbSize =
        
    [3]优化Windows7,让系统运行更流畅
        来源:    发布时间: 2013-10-20

     

    1、加速磁盘碎片整理—–定位并合并本地卷中的碎片文件以提高系统性能:

    /A 在指定的卷上执行分析。
    /C 在所有卷上执行该操作。
    /E 在除了指定卷以外的所有卷上执行该操作。
    /H 以标准优先级运行该操作(默认值低)。
    /M 在后台并行运行每个卷上的该操作。
    /T 跟踪已在指定卷上执行的操作。
    /U 将操作过程打印到屏幕。
    /V 打印包含碎片统计信息的详细输出。
    /X 在指定卷上执行可用空间合并。

    例如:
    defrag C: /U /V
    defrag C: D: /M
    defrag C:\mountpoint /A /U

    2、让IE加载更快—–这是很多人都困扰的地方:

    点击Tools(工具) >Manage Add-ons(管理加载项),右侧的载入用时列表中显示了插件的运行情况。当然,这样做的效果也并非很明显。除非你本来IE就有很多扩展加载项。

    3、Alt+Tab增强用法—-这只是个临时运用技巧:

    如果你已经打开了好多个资源管理器,还运行着许多其它程序,此时要想在这么多程序中找到需要的,用传统的Alt+Tab来切换窗口确实是很费时的。
    快捷方便的方法就是—-先按住Ctrl键,在资源管理器的图标上点一下,windows7将只在这几个资源管理器窗口间切换,这使得窗口定位的速度更快了。本技巧适用于任何支持同时开启多个实例的应用软件。

    4、禁用智能窗口排列:

    windows7的另一个新功能就是智能排列窗口,当你把一个窗口拖拽到屏幕顶部时,它会自动最大化。这个功能可是让人又爱又恨,我们喜欢windows7,但不想用到它的部分功能,怎么办?还是求助于注册表吧,运行REGEDIT,跳转到:
    HKEY_CURRENT_USERControl PanelDesktop
    设置WindowArrangementActive键值为0,重启。

    阅读更多....

    本文链接


        
    最新技术文章:
     




    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3