| Author | Messages | |
bsonposh
Posts:168
 | | 04/29/2008 6:32 PM |
| To be honest... Bruce Payette is a great one for Beginners. http://www.amazon.com/Windows-PowerShell-Action-Bruce-Payette/dp/1932394907/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1203961635&sr=1-1
Great Blog Series Effective PowerShell Series http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!788.entry
Some other good resources
community Sites http://www.powershellcommunity.org http://www.powershellcentral.com
Powershell Guide: http://www.codeplex.com/PsObject/Wiki/View.aspx?title=PSH%20Community%20Guide&referringTitle=Home
Books Powershell in Action http://www.amazon.com/Windows-PowerShell-Action-Bruce-Payette/dp/1932394907/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1203961635&sr=1-1 Windows Powershell Cookbook http://www.amazon.com/Windows-PowerShell-Cookbook-Exchange-2007/dp/0596528493/ref=pd_bbs_sr_3?ie=UTF8&s=books&qid=1203961635&sr=1-3 Powershell TFM http://www.amazon.com/Windows-PowerShell-v1-0-TFM-2nd/dp/0977659763/ref=sr_1_7?ie=UTF8&s=books&qid=1203961635&sr=1-7
FREE! Quest AD CMDLets http://www.quest.com/activeroles-server/arms.aspx
Great Powershell and Group Policy Tool http://www.specopssoft.com/powershell/
On Tue, Apr 29, 2008 at 6:05 PM, Susan Bradley, CPA aka Ebitz - SBS Rocks [MVP] <sbradcpa@pacbell.net> wrote:
> <cough>www.amazon.com<cough> > > Okay so tell me what to buy. I have MSpress's two powershell books, > PowerShell programming for absolute beginners on it's way. What else? Or > is that enough to start? > > > Brandon Shell wrote: > > That is not a WMI thing... That is a vbscript thing. > > IMO: > Pick a languages (Powershell of course ) > Learn basic WMI design (how it works generically) > Learn basic .NET > Your golden. Plenty of examples and people to ask questions of > <cough>me</cough> > > On Tue, Apr 29, 2008 at 5:44 PM, Susan Bradley, CPA aka Ebitz - SBS Rocks > [MVP] <sbradcpa@pacbell.net> wrote: > > > We call that a wizard in SBSland. ;-) > > > > Okay but what if one wants to better understand that strComputer = "." > > means set to local computer. Which place/SDK/book/msdn site is the best > > place to better understand what scriptomatic is doing? (besides googling > > each term)? > > > > > > > > joe wrote: > > > > I have found Scriptomatic to be pretty helpful for finding stuff in the > > WMI arena. It also generates perl script for you.  > > > > Created in seconds.... > > > > use strict; > > use Win32: LE('in'); > > > > use constant wbemFlagReturnImmediately => 0x10; > > use constant wbemFlagForwardOnly => 0x20; > > > > my @computers = ("SFMXP32"); > > foreach my $computer (@computers) { > > print "\n"; > > print "==========================================\n"; > > print "Computer: $computer\n"; > > print "==========================================\n"; > > > > my $objWMIService = > > Win32: LE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI > > connection failed.\n"; > > my $colItems = $objWMIService->ExecQuery("SELECT * FROM > > Win32_Process", "WQL", > > wbemFlagReturnImmediately | wbemFlagForwardOnly); > > > > foreach my $objItem (in $colItems) { > > print "Caption: $objItem->{Caption}\n"; > > print "CommandLine: $objItem->{CommandLine}\n"; > > print "CreationClassName: $objItem->{CreationClassName}\n"; > > print "CreationDate: $objItem->{CreationDate}\n"; > > print "CSCreationClassName: $objItem->{CSCreationClassName}\n"; > > print "CSName: $objItem->{CSName}\n"; > > print "Description: $objItem->{Description}\n"; > > print "ExecutablePath: $objItem->{ExecutablePath}\n"; > > print "ExecutionState: $objItem->{ExecutionState}\n"; > > print "Handle: $objItem->{Handle}\n"; > > print "HandleCount: $objItem->{HandleCount}\n"; > > print "InstallDate: $objItem->{InstallDate}\n"; > > print "KernelModeTime: $objItem->{KernelModeTime}\n"; > > print "MaximumWorkingSetSize: > > $objItem->{MaximumWorkingSetSize}\n"; > > print "MinimumWorkingSetSize: > > $objItem->{MinimumWorkingSetSize}\n"; > > print "Name: $objItem->{Name}\n"; > > print "OSCreationClassName: $objItem->{OSCreationClassName}\n"; > > print "OSName: $objItem->{OSName}\n"; > > print "OtherOperationCount: $objItem->{OtherOperationCount}\n"; > > print "OtherTransferCount: $objItem->{OtherTransferCount}\n"; > > print "PageFaults: $objItem->{PageFaults}\n"; > > print "PageFileUsage: $objItem->{PageFileUsage}\n"; > > print "ParentProcessId: $objItem->{ParentProcessId}\n"; > > print "PeakPageFileUsage: $objItem->{PeakPageFileUsage}\n"; > > print "PeakVirtualSize: $objItem->{PeakVirtualSize}\n"; > > print "PeakWorkingSetSize: $objItem->{PeakWorkingSetSize}\n"; > > print "Priority: $objItem->{Priority}\n"; > > print "PrivatePageCount: $objItem->{PrivatePageCount}\n"; > > print "ProcessId: $objItem->{ProcessId}\n"; > > print "QuotaNonPagedPoolUsage: > > $objItem->{QuotaNonPagedPoolUsage}\n"; > > print "QuotaPagedPoolUsage: $objItem->{QuotaPagedPoolUsage}\n"; > > print "QuotaPeakNonPagedPoolUsage: > > $objItem->{QuotaPeakNonPagedPoolUsage}\n"; > > print "QuotaPeakPagedPoolUsage: > > $objItem->{QuotaPeakPagedPoolUsage}\n"; > > print "ReadOperationCount: $objItem->{ReadOperationCount}\n"; > > print "ReadTransferCount: $objItem->{ReadTransferCount}\n"; > > print "SessionId: $objItem->{SessionId}\n"; > > print "Status: $objItem->{Status}\n"; > > print "TerminationDate: $objItem->{TerminationDate}\n"; > > print "ThreadCount: $objItem->{ThreadCount}\n"; > > print "UserModeTime: $objItem->{UserModeTime}\n"; > > print "VirtualSize: $objItem->{VirtualSize}\n"; > > print "WindowsVersion: $objItem->{WindowsVersion}\n"; > > print "WorkingSetSize: $objItem->{WorkingSetSize}\n"; > > print "WriteOperationCount: $objItem->{WriteOperationCount}\n"; > > print "WriteTransferCount: $objItem->{WriteTransferCount}\n"; > > print "\n"; > > } > > }sub WMIDateStringToDate(strDate) > > { > > return "blah"; > > } > > Oh you want Python instead??? > > > > import win32com.client > > def WMIDateStringToDate(dtmDate): > > strDateTime = "" > > if (dtmDateΒ] == 0): > > strDateTime = dtmDateΓ] + '/' > > else: > > strDateTime = dtmDateΒ] + dtmDateΓ] + '/' > > if (dtmDateΔ] == 0): > > strDateTime = strDateTime + dtmDateΕ] + '/' > > else: > > strDateTime = strDateTime + dtmDateΔ] + dtmDateΕ] + '/' > > strDateTime = strDateTime + dtmDateΎ] + dtmDateΏ] + dtmDateΐ] > > + dtmDateΑ] + " " + dtmDateΖ] + dtmDateΗ] + ":" + dtmDate⎖] + > > dtmDate⎗] +':' + dtmDate⎘] + dtmDate⎙] > > return strDateTime > > > > strComputer = "." > > objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") > > objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") > > colItems = objSWbemServices.ExecQuery("SELECT * FROM Win32_Process") > > for objItem in colItems: > > if objItem.Caption != None: > > print "Caption:" + ` objItem.Caption` > > if objItem.CommandLine != None: > > print "CommandLine:" + ` objItem.CommandLine` > > if objItem.CreationClassName != None: > > print "CreationClassName:" + ` objItem.CreationClassName` > > if objItem.CreationDate != None: > > print "CreationDate:" + > > WMIDateStringToDate(objItem.CreationDate) > > if objItem.CSCreationClassName != None: > > print "CSCreationClassName:" + ` objItem.CSCreationClassName` > > if objItem.CSName != None: > > print "CSName:" + ` objItem.CSName` > > if objItem.Description != None: > > print "Description:" + ` objItem.Description` > > if objItem.ExecutablePath != None: > > print "ExecutablePath:" + ` objItem.ExecutablePath` > > if objItem.ExecutionState != None: > > print "ExecutionState:" + ` objItem.ExecutionState` > > if objItem.Handle != None: > > print "Handle:" + ` objItem.Handle` > > if objItem.HandleCount != None: > > print "HandleCount:" + ` objItem.HandleCount` > > if objItem.InstallDate != None: > > print "InstallDate:" + WMIDateStringToDate(objItem.InstallDate) > > if objItem.KernelModeTime != None: > > print "KernelModeTime:" + ` objItem.KernelModeTime` > > if objItem.MaximumWorkingSetSize != None: > > print "MaximumWorkingSetSize:" + ` > > objItem.MaximumWorkingSetSize` > > if objItem.MinimumWorkingSetSize != None: > > print "MinimumWorkingSetSize:" + ` > > objItem.MinimumWorkingSetSize` > > if objItem.Name != None: > > print "Name:" + ` objItem.Name` > > if objItem.OSCreationClassName != None: > > print "OSCreationClassName:" + ` objItem.OSCreationClassName` > > if objItem.OSName != None: > > print "OSName:" + ` objItem.OSName` > > if objItem.OtherOperationCount != None: > > print "OtherOperationCount:" + ` objItem.OtherOperationCount` > > if objItem.OtherTransferCount != None: > > print "OtherTransferCount:" + ` objItem.OtherTransferCount` > > if objItem.PageFaults != None: > > print "PageFaults:" + ` objItem.PageFaults` > > if objItem.PageFileUsage != None: > > print "PageFileUsage:" + ` objItem.PageFileUsage` > > if objItem.ParentProcessId != None: > > print "ParentProcessId:" + ` objItem.ParentProcessId` > > if objItem.PeakPageFileUsage != None: > > print "PeakPageFileUsage:" + ` objItem.PeakPageFileUsage` > > if objItem.PeakVirtualSize != None: > > print "PeakVirtualSize:" + ` objItem.PeakVirtualSize` > > if objItem.PeakWorkingSetSize != None: > > print "PeakWorkingSetSize:" + ` objItem.PeakWorkingSetSize` > > if objItem.Priority != None: > > print "Priority:" + ` objItem.Priority` > > if objItem.PrivatePageCount != None: > > print "PrivatePageCount:" + ` objItem.PrivatePageCount` > > if objItem.ProcessId != None: > > print "ProcessId:" + ` objItem.ProcessId` > > if objItem.QuotaNonPagedPoolUsage != None: > > print "QuotaNonPagedPoolUsage:" + ` > > objItem.QuotaNonPagedPoolUsage` > > if objItem.QuotaPagedPoolUsage != None: > > print "QuotaPagedPoolUsage:" + ` objItem.QuotaPagedPoolUsage` > > if objItem.QuotaPeakNonPagedPoolUsage != None: > > print "QuotaPeakNonPagedPoolUsage:" + ` > > objItem.QuotaPeakNonPagedPoolUsage` > > if objItem.QuotaPeakPagedPoolUsage != None: > > print "QuotaPeakPagedPoolUsage:" + ` > > objItem.QuotaPeakPagedPoolUsage` > > if objItem.ReadOperationCount != None: > > print "ReadOperationCount:" + ` objItem.ReadOperationCount` > > if objItem.ReadTransferCount != None: > > print "ReadTransferCount:" + ` objItem.ReadTransferCount` > > if objItem.SessionId != None: > > print "SessionId:" + ` objItem.SessionId` > > if objItem.Status != None: > > print "Status:" + ` objItem.Status` > > if objItem.TerminationDate != None: > > print "TerminationDate:" + > > WMIDateStringToDate(objItem.TerminationDate) > > if objItem.ThreadCount != None: > > print "ThreadCount:" + ` objItem.ThreadCount` > > if objItem.UserModeTime != None: > > print "UserModeTime:" + ` objItem.UserModeTime` > > if objItem.VirtualSize != None: > > print "VirtualSize:" + ` objItem.VirtualSize` > > if objItem.WindowsVersion != None: > > print "WindowsVersion:" + ` objItem.WindowsVersion` > > if objItem.WorkingSetSize != None: > > print "WorkingSetSize:" + ` objItem.WorkingSetSize` > > if objItem.WriteOperationCount != None: > > print "WriteOperationCount:" + ` objItem.WriteOperationCount` > > if objItem.WriteTransferCount != None: > > print "WriteTransferCount:" + ` objItem.WriteTransferCount` > > Oh... vbscript, I see > > > > On Error Resume Next > > > > Const wbemFlagReturnImmediately = &h10 > > Const wbemFlagForwardOnly = &h20 > > > > arrComputers = Array("SFMXP32") > > For Each strComputer In arrComputers > > WScript.Echo > > WScript.Echo "==========================================" > > WScript.Echo "Computer: " & strComputer > > WScript.Echo "==========================================" > > > > Set objWMIService = GetObject("winmgmts:\\" & strComputer & > > "\root\CIMV2") > > Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", > > "WQL", _ > > wbemFlagReturnImmediately + > > wbemFlagForwardOnly) > > > > For Each objItem In colItems > > WScript.Echo "Caption: " & objItem.Caption > > WScript.Echo "CommandLine: " & objItem.CommandLine > > WScript.Echo "CreationClassName: " & objItem.CreationClassName > > WScript.Echo "CreationDate: " & > > WMIDateStringToDate(objItem.CreationDate) > > WScript.Echo "CSCreationClassName: " & objItem.CSCreationClassName > > WScript.Echo "CSName: " & objItem.CSName > > WScript.Echo "Description: " & objItem.Description > > WScript.Echo "ExecutablePath: " & objItem.ExecutablePath > > WScript.Echo "ExecutionState: " & objItem.ExecutionState > > WScript.Echo "Handle: " & objItem.Handle > > WScript.Echo "HandleCount: " & objItem.HandleCount > > WScript.Echo "InstallDate: " & > > WMIDateStringToDate(objItem.InstallDate) > > WScript.Echo "KernelModeTime: " & objItem.KernelModeTime > > WScript.Echo "MaximumWorkingSetSize: " & > > objItem.MaximumWorkingSetSize > > WScript.Echo "MinimumWorkingSetSize: " & > > objItem.MinimumWorkingSetSize > > WScript.Echo "Name: " & objItem.Name > > WScript.Echo "OSCreationClassName: " & objItem.OSCreationClassName > > WScript.Echo "OSName: " & objItem.OSName > > WScript.Echo "OtherOperationCount: " & objItem.OtherOperationCount > > WScript.Echo "OtherTransferCount: " & objItem.OtherTransferCount > > WScript.Echo "PageFaults: " & objItem.PageFaults > > WScript.Echo "PageFileUsage: " & objItem.PageFileUsage > > WScript.Echo "ParentProcessId: " & objItem.ParentProcessId > > WScript.Echo "PeakPageFileUsage: " & objItem.PeakPageFileUsage > > WScript.Echo "PeakVirtualSize: " & objItem.PeakVirtualSize > > WScript.Echo "PeakWorkingSetSize: " & objItem.PeakWorkingSetSize > > WScript.Echo "Priority: " & objItem.Priority > > WScript.Echo "PrivatePageCount: " & objItem.PrivatePageCount > > WScript.Echo "ProcessId: " & objItem.ProcessId > > WScript.Echo "QuotaNonPagedPoolUsage: " & > > objItem.QuotaNonPagedPoolUsage > > WScript.Echo "QuotaPagedPoolUsage: " & objItem.QuotaPagedPoolUsage > > WScript.Echo "QuotaPeakNonPagedPoolUsage: " & > > objItem.QuotaPeakNonPagedPoolUsage > > WScript.Echo "QuotaPeakPagedPoolUsage: " & > > objItem.QuotaPeakPagedPoolUsage > > WScript.Echo "ReadOperationCount: " & objItem.ReadOperationCount > > WScript.Echo "ReadTransferCount: " & objItem.ReadTransferCount > > WScript.Echo "SessionId: " & objItem.SessionId > > WScript.Echo "Status: " & objItem.Status > > WScript.Echo "TerminationDate: " & > > WMIDateStringToDate(objItem.TerminationDate) > > WScript.Echo "ThreadCount: " & objItem.ThreadCount > > WScript.Echo "UserModeTime: " & objItem.UserModeTime > > WScript.Echo "VirtualSize: " & objItem.VirtualSize > > WScript.Echo "WindowsVersion: " & objItem.WindowsVersion > > WScript.Echo "WorkingSetSize: " & objItem.WorkingSetSize > > WScript.Echo "WriteOperationCount: " & objItem.WriteOperationCount > > WScript.Echo "WriteTransferCount: " & objItem.WriteTransferCount > > WScript.Echo > > Next > > Next > > > > > > Function WMIDateStringToDate(dtmDate) > > WScript.Echo dtm: > > WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _ > > Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _ > > & " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & > > Mid(dtmDate,13, 2)) > > End Function > > > > > > > > > > -- > > O'Reilly Active Directory Third Edition - > > http://www.joeware.net/win/ad3e.htm > > > > > > > > ------------------------------ > > *From:* ActiveDir-owner@mail.activedir.org [ > > mailto:ActiveDir-owner@mail.activedir.org<ActiveDir-owner@mail.activedir.org>] > > *On Behalf Of *Michael B. Smith > > *Sent:* Tuesday, April 29, 2008 1:18 PM > > *To:* ActiveDir@mail.activedir.org > > *Subject:* RE: [ActiveDir] [OT] BIND as Secondary DNS? > > > > From one of my upcoming books: > > > > > > > > WMI stands for Windows Management Instrumentation. WMI is the Microsoft > > implementation of something known as CIM, which stands for Common > > Information Model. CIM (and therefore WMI) is an industry-standard way of > > representing information about computing objects. These objects include > > processors, processes, tasks, networks, IP addresses, routers, switches, > > etc. etc. There are literally hundreds of WMI objects implemented within > > modern versions of Windows (WMI was first available in Windows 2000 Server). > > > > WMI provides a schema (that is, a description of the information that is > > available) and a specification of the format of the data contained within > > the schema. Within WMI, Microsoft has also defined a simple and standard > > mechanism for accessing the information contained therein. > > > > In my opinion, you get a great deal of value from spending time reading > > the MSDN documents on (for example) Win32_Process. And if you get there, you > > can see all the other Win32_* items. Drill down, and lo and behold, there is > > a wealth of data. > > > > > > > > Within PowerShell, start with "gwmi win32_process | fl" and go from > > there… > > > > > > > > http://msdn2.microsoft.com/en-us/library/aa394372(VS.85).aspx<http://msdn2.microsoft.com/en-us/library/aa394372%28VS.85%29.aspx> > > > > > > > > Regards, > > > > > > > > Michael B. Smith > > > > MCSE/Exchange MVP > > > > http://TheEssentialExchange.com <http://theessentialexchange.com/> > > > > > > > > *From:* ActiveDir-owner@mail.activedir.org [ > > mailto:ActiveDir-owner@mail.activedir.org<ActiveDir-owner@mail.activedir.org>] > > *On Behalf Of *Susan Bradley, CPA aka Ebitz - SBS Rocks [MVP] > > *Sent:* Tuesday, April 29, 2008 1:01 PM > > *To:* ActiveDir@mail.activedir.org > > *Subject:* Re: [ActiveDir] [OT] BIND as Secondary DNS? > > > > > > > > I think it's what you are used to and what makes sense to your platform. > > > > Up here in the GUI world PowerShell is being used all around me. SBS is > > exposing it in the 2k8 era and using it for antispam cmdlets in Exchange > > 2k7, move data scripting and it's being used in the backup tasks. IIS 7 > > just came out with a PowerShell platform as well. > > > > You and your blinking c prompt server core world it's understandable :-) > > > > Forgive the very newb question... in my platform I am looking at > > PowerShell but find that the PowerShell scripting tutorials assume a > > foundational knowledge of WMI, Common Information Model Standards and what > > not. What resource would you gurus say is the best one for better > > understanding these foundations? > > > > > > > > joe wrote: > > > > Note that I am not saying no one else should be using PoS or .NET... I > > am saying for me, it hasn't made any sense to do so IMO. I actually > > recommend some others to use it because it would be the quickest easiest way > > for them to spin up. But when people ask me to get involved with it, I don't > > see the benefit *to me* to do so and say so. This includes writing wrappers, > > etc for it because people seem to think I do certain things better than > > others. > > > > > > > > > > > > -- > > > > O'Reilly Active Directory Third Edition - > > http://www.joeware.net/win/ad3e.htm > > > > > > > > > > > > > > ------------------------------ > > > > *From:* ActiveDir-owner@mail.activedir.org [ > > mailto:ActiveDir-owner@mail.activedir.org<ActiveDir-owner@mail.activedir.org>] > > *On Behalf Of *joe > > *Sent:* Tuesday, April 29, 2008 12:42 PM > > *To:* ActiveDir@mail.activedir.org > > *Subject:* RE: [ActiveDir] [OT] BIND as Secondary DNS? > > > > Binary, Unicode, and large int can't be marshalled into text? How do you > > know that isn't happening in the backend somewhere currently? Say some XML > > stream of some sort? There is and has been a whole object passing model that > > has existed for years and years and years called CORBA but the actual > > implementation of that is a bit FAT for what we are talking about because it > > needed to account for many things we don't care about in the command line > > management world. But a similar idea slimmed down to the specific case of > > passing data between two command line processes would be nice and it could > > be published as a protocol instead of locking into a specific app model. > > > > > > > > I think you are happy that the data marshalling is done and you don't > > have to deal with it, the fact that it is powershell or .net or anything > > else doesn't really play into it. Anything given to you with the same > > functionality would have been fine. It is like when people rave about > > PowerShell because it lets them manage Exchange at the command line, that > > isn't an argument for PowerShell, it is an argument for having anything that > > can actually do what you need that didn't exist or possibly didn't know how > > to do before. > > > > > > > > I like the idea of PowerShell, I think the .NET requirement was > > extremely shortsighted considering it isn't what I would consider a first > > class citizen of the OS. But I still don't see anything that PoS does for me > > that makes me go, my god, I could never accomplish that any other way. Once > > we start seeing kernel components written in and being run by .NET pieces > > meaning perf has actually been looked at in some serious way, .NET will > > start looking more attractive to me. Write now the arguments are mostly of > > the variety that people gave for VB years ago and that wasn't enough to get > > me to use VB either. Ditto Java. Now when Borland came out with Borland > > Builder which gave me VB capability with native good c++ code, I was all > > over that. > > > > > > > > > > > > -- > > > > O'Reilly Active Directory Third Edition - > > http://www.joeware.net/win/ad3e.htm > > > > > > > > > > > > > > ------------------------------ > > > > *From:* ActiveDir-owner@mail.activedir.org [ > > mailto:ActiveDir-owner@mail.activedir.org<ActiveDir-owner@mail.activedir.org>] > > *On Behalf Of *Brandon Shell > > *Sent:* Tuesday, April 29, 2008 11:05 AM > > *To:* ActiveDir@mail.activedir.org > > *Subject:* Re: [ActiveDir] [OT] BIND as Secondary DNS? > > > > What about Binary Data? Unicode? or iADSLargeInteger. The biggest thing > > you lose is ability to maintain the integrity of the object/text throughout > > the pipe. Using .NET you know if you have FileInfo object it will stay a > > FileInfo object until you decide to change it. The problem isn't passing the > > text, it is knowing what to do with it on the flip side. The benefit you > > have with the object model is Typing. I can TYPE the data so that there is > > no ambiguity in the interpretation of the "text." > > > > > > > > I don't feel the need to debate the design of Powershell (that is water > > under the bridge,) but the validity of the usefulness of dealing with > > Objects. Ironically we both agree with the crapiness of the s.ds.d namespace > > and ADSI in general, but that is a VERY small scope for Powershell. When it > > comes to Dealing with Processes, Files, WMI, and the slew of other things > > that Powershell Addresses from an Admin point of view using the .NET > > namespace was a good idea. > > > > > > > > What Dushyant was talking about was, in Powershell you can have > > Parameters that can be passed via the Pipe. These Parameters are determined > > by Type or by Name. If it is a STRING it goes here, if it is a DATETIME it > > goes there, if it is ... You get the idea. You can NOT achieve that passing > > just text. It is just not feasible. Basically, I get your point, The > > serialization is still done I just don't have to deal with it. This is the > > draw. I don't have to worry about it. Not to mention it is SUPER powerful. > > > > > > > > In regards to "defined this standard passing mechanism" They did... its > > called .NET Almost all the stuff they needed already had pre-defined .NET > > classes that could be used. > > > > > > > > I really respect your opinion. You have a lot of experience, but I think > > in this case you have been blinded by your hatred for .NET (albeit > > understandable hatred.) Could Powershell have been done different... > > absolutely. Could it have been done better... absolutely. Should they have > > used .NET or just a standard parsing methods... that is converstation for > > you and Jeffrey Snover. > > > > > > > > btw... Powershell is not a shell. It is an Engine similar to vbscript > > parsing engine. They just have a shell that loads Powershell. > > > > On Tue, Apr 29, 2008 at 9:48 AM, joe <listmail@joeware.net> wrote: > > > > Give me an example or three of things you can do that you don't think > > could be done otherwise that you believe to be a function of passing info > > between programs (or if you prefer, call them cmdlets) that you can't do > > with passing text. And as we were discussing at the summit, these should not > > be things based on two apps not speaking the same language because no one > > defined a protocol for the text streaming interchang, but things that > > couldn't be done period even if that was defined. As you know and despite > > the incorrect assumption/comment made by Dushyant in the PoS session, > > Adfind/Mod and ds* can actually communicate with each other in great part > > because I allowed it and that isn't all that hard as long as people agree on > > a format. But give me an example of something that can't be done with that > > object passing that you feel can't be accomplished if the > > agreements/protocols aren't established. > > > > > > > > I think we would have been better served if MSFT had defined this > > standard passing mechanism versus doing what was done. Something that wasn't > > solely reliant on .NET. The .NET requirement is a silly requirement IMO. > > Anyway, this wouldn't even need a whole new shell to pull off and the > > foundation would have built up a lot faster and be far wider and accepted > > now than it is. Again, IMO. > > > > > > > > joe > > > > > > > > > > > > -- > > > > O'Reilly Active Directory Third Edition - > > http://www.joeware.net/win/ad3e.htm > > > > > > > > > > > > > > ------------------------------ > > > > *From:* ActiveDir-owner@mail.activedir.org [mailto: > > ActiveDir-owner@mail.activedir.org] *On Behalf Of *Brandon Shell > > > > *Sent:* Tuesday, April 29, 2008 9:34 AM > > > > > > *To:* ActiveDir@mail.activedir.org > > *Subject:* Re: [ActiveDir] [OT] BIND as Secondary DNS? > > > > > > > > While I still think it would be cool for you to write them... I have > > S.DS.P now... That solves my immediate need so I can do the rest  > > > > > > > > It may not be as fast as ADFind, but the flexibility of objects will > > more than make up for that time lost with my ability to process the output. > > > > > > > > To be clear... I think ADFind and ADMod awesome tools and I am very > > grateful for them. > > > > On Tue, Apr 29, 2008 at 9:08 AM, joe <listmail@joeware.net> wrote: > > > > Absolutely, I just don't consider that exploring... If I did explore > > that area, it would be to work out how to write native code to interface > > with it. > > > > > > > > If ya want it to so bad... you write it.  > > > > > > > > joe > > > > > > > > > > > > -- > > > > O'Reilly Active Directory Third Edition - > > http://www.joeware.net/win/ad3e.htm > > > > > > > > Those who can.... do. > > > > Those who can't... beg. > > > > > > > > > > ------------------------------ > > > > *From:* ActiveDir-owner@mail.activedir.org [mailto: > > ActiveDir-owner@mail.activedir.org] *On Behalf Of *Brandon Shell > > *Sent:* Tuesday, April 29, 2008 9:02 AM > > > > > > *To:* ActiveDir@mail.activedir.org > > > > *Subject:* Re: [ActiveDir] [OT] BIND as Secondary DNS? > > > > *never stop exploring...*  > > > > On Tue, Apr 29, 2008 at 8:50 AM, joe <listmail@joeware.net> wrote: > > > > Very funnyΏ].... > > > >  > > > > joe > > > > > > Ώ] But accurate > > > > > > > > -- > > O'Reilly Active Directory Third Edition - > > http://www.joeware.net/win/ad3e.htm > > > > -----Original Message----- > > From: ActiveDir-owner@mail.activedir.org > > > > [mailto:ActiveDir-owner@mail.activedir.org] On Behalf Of Dean Wells > > Sent: Tuesday, April 29, 2008 8:17 AM > > To: ActiveDir@mail.activedir.org > > Subject: RE: [ActiveDir] [OT] BIND as Secondary DNS? > > > > Hehe ... and not entirely dissimilar to what happens when people ask joe > > .NET/Powershell questions in-person; joe: can you write a wrapper ... > > joe? > > joe? ... where'd he go? > > > > -- > > Dean Wells > > MSEtechnology > > t Email: dwells@msetechnology.com > > http://msetechnology.com > > > > -----Original Message----- > > From: ActiveDir-owner@mail.activedir.org > > [mailto:ActiveDir-owner@mail.activedir.org] On Behalf Of Richard Kline > > Sent: Monday, April 28, 2008 10:20 AM > > To: ActiveDir@mail.activedir.org > > Subject: RE: [ActiveDir] [OT] BIND as Secondary DNS? > > > > First Nomination for Understatement of the Year award: > > > > -----Original Message----- > > From: ActiveDir-owner@mail.activedir.org > > [mailto:ActiveDir-owner@mail.activedir.org] On Behalf Of joe > > Sent: Sunday, April 27, 2008 4:28 PM > > To: ActiveDir@mail.activedir.org > > Subject: RE: [ActiveDir] [OT] BIND as Secondary DNS? > > > > ... > > > > A DNS server that is dynamically handed its address is NOT the most > > useful > > device you could have on a network...  > > > > > > joe > > > > > > List info : http://www.activedir.org/List.aspx > > List FAQ : http://www.activedir.org/ListFAQ.aspx > > List archive: http://www.activedir.org/ma/default.aspx > > > > List info : http://www.activedir.org/List.aspx > > List FAQ : http://www.activedir.org/ListFAQ.aspx > > List archive: http://www.activedir.org/ma/default.aspx > > > > List info : http://www.activedir.org/List.aspx > > List FAQ : http://www.activedir.org/ListFAQ.aspx > > List archive: http://www.activedir.org/ma/default.aspx > > > > > > > > > > > > > > > > List info : http://www.activedir.org/List.aspx List FAQ : > > http://www.activedir.org/ListFAQ.aspx List archive: > > http://www.activedir.org/ma/default.aspx > > > > List info : http://www.activedir.org/List.aspx List FAQ : > > http://www.activedir.org/ListFAQ.aspx List archive: > > http://www.activedir.org/ma/default.aspx > > > List info : http://www.activedir.org/List.aspx List FAQ : > http://www.activedir.org/ListFAQ.aspx List archive: > http://www.activedir.org/ma/default.aspx >
| | | |
|
|