SlideShare a Scribd company logo
WRITING COMMAND-LINE
            TOOLS WITH IRONPYTHON
            AND VISUAL STUDIO
Noah Gift   Including PowerShell, and F#
Talk Objectives

¤  Freak  you out a bit.
¤  Teach you something you
    didn’t know. (Not covered in
    any book).
¤  Be controversial.

¤  Entertain you.
Monty Hall Problem
¤  You are invited to a game
    show.
¤  Game show host shows you
    three doors.
¤  Behind two doors there is a
    goat, and behind one door is
    a $50,000 dollar sports car.
Monty Hall Problem
¤  You  choose a door.
¤  Instead of opening your
    door. The game show
    host then opens up
    another door, to reveal a
    goat.
¤  Do you switch your
    choice?
Monty Hall Problem

¤  You  always switch doors:
    2/3 probability versus ½
    probability.
¤  Bayes Rule shows us this:
    (Think Spam classification).
Monty Hall Takeaway
¤  This isn’t intuitive to most
    people
¤  The human brain’s intuition
    is often broken.
¤  What else is your brain
    wrong about?
Windows Is The Great Satan?
                ¤  Command-line      is feeble
                ¤  People on twitter say it sucks
                ¤  Nothing COOL ever happens
                    on Windows
                ¤  This isn’t “their” conference.

                ¤  What if your brain’s intuition is
                    wrong about this too?
I Used To Hate Windows
                 ¨    I Grew Up
                 ¨    New Philosophy: Write
                       Code in any language,
                       in any environment.
                 ¨    If it is innovative, I don’t
                       care who made it.
                 ¨    Sorry Stallman, we
                       disagree.
What do most developers and admins
think of when they hear Linux?
¨  Power          ¨  The Shell
¨  Flexibility    ¨  Command-tools

¨  Bash           ¨  Man Pages

¨  SSH            ¨  Awk/Sed
What Is The Unifying Theme Around This?
¨  String Output is King   ¨    Tim O’Reilly in Unix
¨  Small Tools                   Power Tools, “A new
¨  Flexibility
                                  user by stringing
                                  together simple
¨  Geek Power.
                                  pipelines….”
The Hardest Part of Writing a *Nix
Command-line tool in Python
¨  Remote Administration:    ¨    Religious war in your
    Pyro vs SSH vs ???              company over using
¨  Dealing with *Nix tools         optparse, getargs,
    that pass you back              or argparse
    unstructured text.
Python/Unix Command-line Tools: The
End Game
                    ¨    Remote Object
                          Invocation (Pyro, SSH,
                          Fabric)
                    ¨    Security (SSH, SSL)
                    ¨    Automation
                    ¨    Application API
                    ¨    Event Management
                          (Pyro)
                    ¨    Transactions (Mercurial?)
How To Write A Classic IronPython CLI
¨  I needed to upgrade 100’s of thousands of lines of
    C# to .NET 4.0.
¨  I wrote a quick and dirty Command-line tool in

    IronPython.
Project Upgrader: Validate Version
         	
  

Step 1   def	
  validate_vsver(slnfile):	
  
         	
  	
  	
  	
  """Validates	
  whether	
  a	
  .sln	
  file	
  has	
  already	
  been	
  upgraded	
  to	
  VS	
  2010"""	
  
         	
  	
  	
  	
  try:	
  
         	
  	
  	
  	
  	
  	
  	
  	
  project_file	
  =	
  open(slnfile)	
  
         	
  	
  	
  	
  	
  	
  	
  	
  for	
  project_version_line	
  in	
  project_file.readlines():	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  "Visual	
  Studio	
  2010"	
  in	
  project_version_line:	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  log.debug("Found	
  VS	
  2010	
  project	
  line:	
  %s"	
  %	
  project_version_line)	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  log.debug("Project	
  file	
  already	
  upgraded....skipping:	
  %s"	
  %	
  slnfile)	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  False	
  
         	
  	
  	
  	
  	
  	
  	
  	
  return	
  True	
  
         	
  	
  	
  	
  finally:	
  
         	
  	
  	
  	
  	
  	
  	
  	
  project_file.close()	
  
Project Upgrader: Walk A Tree
Step 2   def	
  walk_tree(path,	
  extension="sln",	
  
         version_control_type=".svn",	
  exclude_path=None):	
  
         	
  	
  	
  	
  """Walks	
  a	
  tree,	
  if	
  there	
  is	
  a	
  match	
  to	
  an	
  extension,	
  
         it	
  returns	
  a	
  fullpath.	
  
         	
  	
  	
  	
  	
  
         	
  	
  	
  	
  Skips	
  version_control_type	
  directories,	
  which	
  by	
  
         default	
  is	
  set	
  to	
  .svn	
  	
  
         	
  	
  	
  	
  """	
  
         	
  	
  	
  	
  for	
  dirpath,dirname,filename	
  in	
  os.walk(path):	
  
         	
  	
  	
  	
  	
  	
  	
  	
  #The	
  walk	
  should	
  skip	
  version	
  control	
  directories	
  
         	
  	
  	
  	
  	
  	
  	
  	
  for	
  dir	
  in	
  dirname:	
  
Project Upgrader: Convert Project
         	
  
Step 3   def	
  convert_project(filename):	
  
         	
  	
  	
  	
  """Converts	
  a	
  project	
  to	
  VS2010	
  using	
  deven	
  via	
  .NET	
  Process	
  
         Class"""	
  
         	
  	
  	
  	
  p	
  =	
  Process()	
  
         	
  	
  	
  	
  p.StartInfo.UseShellExecute	
  =	
  False	
  
         	
  	
  	
  	
  p.StartInfo.RedirectStandardOutput	
  =	
  True	
  
         	
  	
  	
  	
  p.StartInfo.RedirectStandardError	
  =	
  True	
  
         	
  	
  	
  	
  p.StartInfo.FileName	
  =	
  """C:Program	
  Files	
  (x86)Microsoft	
  
         Visual	
  Studio	
  10.0Common7IDEdevenv.exe"""	
  
         print	
  "Stdout:	
  %s|	
  Stderr:	
  %s"	
  %	
  (stdout,	
  stderr)	
  
         	
  	
  	
  	
  p.WaitForExit()	
  
         	
  	
  	
  	
  return	
  p.ExitCode	
  
Project Upgrader: Convert Tree
         	
  
Step 4   def	
  convert_tree(path,	
  exclude_path):	
  
         	
  	
  	
  	
  """Recursively	
  modifies	
  a	
  tree	
  of	
  sln	
  files,	
  if	
  they	
  
         haven't	
  been	
  upgraded	
  to	
  VS	
  2010"""	
  
         	
  	
  	
  	
  	
  
         	
  	
  	
  	
  for	
  file	
  in	
  walk_tree(path,	
  exclude_path=exclude_path):	
  
         	
  	
  	
  	
  	
  	
  	
  	
  if	
  not	
  validate_vsver(file):	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #we	
  should	
  pass	
  upgrading	
  if	
  validate_vsver	
  
         returns	
  False	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  continue	
  
         	
  	
  	
  	
  	
  	
  	
  	
  exit_code	
  =	
  convert_project(file)	
  
         	
  	
  	
  	
  	
  	
  	
  	
  log.info("%s,	
  %s"	
  %	
  (exit_code,	
  file))	
  
Project Upgrader: Run method
         	
  
Step 4   	
  def	
  run(self):	
  
         	
  	
  	
  	
  	
  	
  	
  	
  args,	
  parser	
  =	
  self.options()	
  
         	
  	
  	
  	
  	
  	
  	
  	
  if	
  args.path:	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  exclude	
  =	
  None	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  args.exclude:	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  exclude	
  =	
  args.exclude	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  log.info("Exclude	
  set:	
  %s"	
  %	
  exclude)	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  log.info("%s	
  Running	
  VS2010	
  upgrade	
  on	
  tree:	
  %s	
  |	
  
         excluding	
  dirs	
  named:	
  %s"	
  %	
  (time.ctime(),	
  args.path,	
  exclude))	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  convert_tree(args.path,	
  exclude_path=exclude)	
  	
  	
  	
  	
  	
  	
  	
  	
  
         	
  	
  	
  	
  	
  	
  	
  	
  else:	
  
         	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  parser.print_help()
Python is like Kudzu
                  ¤  Itsstrength is that it can
                      embed itself into any project,
                      any operating system.
                  ¤  Not always the best tool, but
                      often good enough.
Who Is The Target Audience For
Command-line Tools?
                  ¤  Systems Administrators
                  ¤  Power Users
                  ¤  Developers

                  ¤  Systems Integrators/OEM

                  ¤  Young Geeky Stallman
What Does It Really Mean To Write A
Command-line tool on Linux
                  ¤  You  have an executable that
                      runs in the context of, most
                      likely, Bash.
                  ¤  You output a string, which you
                      can then pipeline into our Unix
                      tools, sed, awk, grep.
                  ¤  If your nice you create –help
What Does It Really Mean To Write A
Command-line tool on Modern Windows
                 ¤  Itis going to run inside of
                     PowerShell. PowerShell is your
                     bash.
                 ¤  You have a unified interface
                     to .NET and every possible
                     high level automation API you
                     can think of.
                 ¤  PowerShell tools expect
                     OBJECTS not strings.
PowerShell is Secure By Default
                         ¤  Default  File
                             Association is
                             Notepad or ISE.
                         ¤  Remoting is
                             disabled.
                         ¤  No execution of
                             scripts.
                         ¤  Script Signing
Learning To Properly Write IronPython
Command-Line Tools: “A two minute affair”
                    ¤  Actually no, not even close.
                    ¤  Forget “most” of what you
                        know from linux.
                    ¤  PowerShell changes
                        everything.
PowerShell Object Passing Changes How
Shells Work
                  ¤  Fundamental   change to
                      understand
                  ¤  You need to understand this to
                      write command-line tools on
                      Windows
                  ¤  Game changer
We’re not in a flyover state anymore
                 ¤  String
                          output is lame!
                 ¤  PowerShell wants objects
                 ¤  What to do…what to do…
Fight the ecosystem and you will die
                 ¤  Command-line     tools should run
                     in PowerShell not cmd.exe.
                 ¤  The bash/linux CPython way,
                     won’t cut it here.
                 ¤  You must think the way .NET
                     thinks.
                 ¤  Everything takes and returns
                     an Object.
PowerShell Endgame: We did
EVERYTHING for you.
                 ¤  Encrypted,  paranoid secure,
                     transactional, asynchronous
                     remoting of serialized objects
                 ¤  High level automation API to
                     everything.
                 ¤  Ignore at your own peril.
Writing a PowerShell Module In IronPython: The
“real” way to write Command-line tools?
¨  Create a New Visual Studio Project
¨  Thinks Objects

¨  Use PowerShell SDK

¨  Write a Binary Module
Installing the PowerShell SDK
¤  Download  the SDK
¤  Add a reference to the DLL in your Visual Studio Project

¤ C:ProgramFiles (x86)Reference
  AssembliesMicrosoftWindowsPowerShell
  v1.0System.Management.Automation
Finding and Loading PowerShell Modules
¨  Get-Module –all
¨  When you create a .dll in IronPython, could then

    simply integrate it into the PowerShell workflow.
What is a Binary Module?
¤  A .NET assembly compiled against PowerShell
   libraries.
¨  For IronPython folks, this is one way to integrate into
    PowerShell
¨  In a lot of documentation it will refer to C# code.

¨  You can also write a PowerShell, non-compiled,
    module.
Creating a Binary Module For Powershell
 in IronPython
¤  http://stackoverflow.com/questions/2094694/launch-
    powershell-under-net-4
¤  You need to tweak some registry settings to support .NET 4.0
    in PowerShell.
Creating a Binary Module For Powershell
 in IronPython: Continued
¤  Should   follow C# example code for best implementation
    advice.
¤  Note, Argparse, Optparse, etc, aren’t used. They don’t make
    sense.
¤  These are objects being passed into other cmdlets, and
    methods are being called on those objects.
IronPython PowerShell Module Hello
World
Visual Studio   import	
  clr	
  
Project:        clr.AddReference('System.Management.Automation')	
  
                print	
  'Hello	
  World'	
  
Step 1
IronPython PowerShell Module Hello World
Visual Studio   ¨  Build the project to create a .dll
Project:
                ¨  In PowerShell Import Module
Step 2
                ¨  Import-Module MyModule.dll

                ¨  You can know interact with it from inside

                    of .Net. Is this a commandline tool???
Setting Up A PowerShell Profile For IronPython
¨  Just like in Bash or
    ZSH, aliases are your
    friend.
¨  Edit your $profile with
    the ISE, and add
    interactive IronPython
    to it.
Creating Standalone IronPython executables
¨  Make sure you can
    pass objects in and out
    of them.
¨  Use the IronPython on

    codeplex: Pyc-Python
    Command-line compiler
F#: The Elephant in the Room
                ¤  Type   inference
                ¤  Immutable data structures
                ¤  Run as script or compiled

                ¤  Tail recursion

                ¤  Fully integrated with Visual
                    Studio
                ¤  Sexier then Python?
F# and Python: A Sexy Beast
                ¤  Mixing   .dll files written in F#
                    into IronPython modules,
                    loaded into Powershell.
                ¤  Calling IronPython/CPython
                    from inside of F#
                ¤  “A statically typed
                    Python…” (Note, this will come
                    up..just preparing you…)
Credit Some Excellent Books That
Reference PowerShell
                   ¤  PowerShell   in Action,
                       Manning (The Bible)
                   ¤  PowerShell Cookbook, O’Reilly

                   ¤  IronPython in Action, Manning
Conclusion
             ¤  PowerShell isn’t a competing
                 language, it IS THE ECOSYSTEM.
             ¤  Windows Systems Admins are
                 using PowerShell for everything
             ¤  Get your head wrapped around
                 object based pipelines.
             ¤  Why doesn’t Linux have this?
Questions?
             Code:
             https://bitbucket.org/noahgift/pycon2011-
             ironpython-cli

More Related Content

PDF
Understanding ScratchX Extensions with JavaScript
PDF
Understanding Scratch Extensions with JavaScript (Part 2 of 2)
PDF
Under the Dome (of failure driven pipeline)
PDF
Pilot Tech Talk #10 — Practical automation by Kamil Cholewiński
PDF
Rainbow Over the Windows: More Colors Than You Could Expect
PDF
When is something overflowing
PDF
Windows Attacks AT is the new black
PPTX
Software Security : From school to reality and back!
Understanding ScratchX Extensions with JavaScript
Understanding Scratch Extensions with JavaScript (Part 2 of 2)
Under the Dome (of failure driven pipeline)
Pilot Tech Talk #10 — Practical automation by Kamil Cholewiński
Rainbow Over the Windows: More Colors Than You Could Expect
When is something overflowing
Windows Attacks AT is the new black
Software Security : From school to reality and back!

What's hot (20)

PDF
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
PDF
Package manages and Puppet - PuppetConf 2015
PDF
Docker: automation for the rest of us
PDF
Aucklug slides - desktop tips and tricks
PPTX
THE BASIC TOOLS
PDF
Puppet Camp LA 2/19/2015
PPTX
Hacking - high school intro
PPTX
Invoke-Obfuscation nullcon 2017
PPTX
Pwning with powershell
PDF
Defcon 22-colby-moore-patrick-wardle-synack-drop cam
PDF
Puppet for SysAdmins
PPTX
Teensy Programming for Everyone
PDF
Chef Conf 2015: Package Management & Chef
PDF
Attacker Ghost Stories (CarolinaCon / Area41 / RVASec)
PDF
Puppet getting started by Dirk Götz
PPTX
Adventures in Asymmetric Warfare
PPTX
Get-Help: An intro to PowerShell and how to Use it for Evil
PPTX
Catch Me If You Can: PowerShell Red vs Blue
PDF
Defcon 22-paul-mcmillan-attacking-the-iot-using-timing-attac
PPTX
Introducing PS>Attack: An offensive PowerShell toolkit
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Package manages and Puppet - PuppetConf 2015
Docker: automation for the rest of us
Aucklug slides - desktop tips and tricks
THE BASIC TOOLS
Puppet Camp LA 2/19/2015
Hacking - high school intro
Invoke-Obfuscation nullcon 2017
Pwning with powershell
Defcon 22-colby-moore-patrick-wardle-synack-drop cam
Puppet for SysAdmins
Teensy Programming for Everyone
Chef Conf 2015: Package Management & Chef
Attacker Ghost Stories (CarolinaCon / Area41 / RVASec)
Puppet getting started by Dirk Götz
Adventures in Asymmetric Warfare
Get-Help: An intro to PowerShell and how to Use it for Evil
Catch Me If You Can: PowerShell Red vs Blue
Defcon 22-paul-mcmillan-attacking-the-iot-using-timing-attac
Introducing PS>Attack: An offensive PowerShell toolkit
Ad

Viewers also liked (9)

PPT
Python with dot net and vs2010
PPT
IronPython and Dynamic Languages on .NET by Mahesh Prakriya
ODP
Open Source .NET
PPTX
Python 101 For The Net Developer
PPTX
Dynamic programming on .net
PPTX
The .NET developer's introduction to IronPython
PPTX
SyPy IronPython
PDF
Python Tools for Visual Studio: Python na Microsoftovom .NET-u
PPT
Introduction to Python
Python with dot net and vs2010
IronPython and Dynamic Languages on .NET by Mahesh Prakriya
Open Source .NET
Python 101 For The Net Developer
Dynamic programming on .net
The .NET developer's introduction to IronPython
SyPy IronPython
Python Tools for Visual Studio: Python na Microsoftovom .NET-u
Introduction to Python
Ad

Similar to PyCon 2011: IronPython Command Line (20)

PDF
Python for Linux System Administration
PDF
PyCon 2013 : Scripting to PyPi to GitHub and More
PDF
(1) cpp introducing the_cpp_programming_language
PDF
Fabric-让部署变得简单
PDF
Scripting Recipes for Testers
PPT
Python advanced 3.the python std lib by example – application building blocks
PDF
Bash vs. vista_power_shell
PDF
Engineer Engineering Software
PDF
PyData Texas 2015 Keynote
PDF
How to write a well-behaved Python command line application
PDF
Python Intro
PDF
Pentester++
PDF
Automation - fabric, django and more
PDF
Intro to Python Workshop San Diego, CA (January 19, 2013)
PPTX
Overview of python misec - 2-2012
PDF
Care and Feeding of Large Web Applications
PDF
Whether you should migrate to git
PDF
Tips and Tricks for Increased Development Efficiency
PDF
Modern web dev_taxonomy
PDF
Programming with Python - Basic
Python for Linux System Administration
PyCon 2013 : Scripting to PyPi to GitHub and More
(1) cpp introducing the_cpp_programming_language
Fabric-让部署变得简单
Scripting Recipes for Testers
Python advanced 3.the python std lib by example – application building blocks
Bash vs. vista_power_shell
Engineer Engineering Software
PyData Texas 2015 Keynote
How to write a well-behaved Python command line application
Python Intro
Pentester++
Automation - fabric, django and more
Intro to Python Workshop San Diego, CA (January 19, 2013)
Overview of python misec - 2-2012
Care and Feeding of Large Web Applications
Whether you should migrate to git
Tips and Tricks for Increased Development Efficiency
Modern web dev_taxonomy
Programming with Python - Basic

More from Lecturer UC Davis & Northwestern (8)

PPTX
Sentiment analysis for Business Analytics
PPT
Social power and_influence_in_the_nba_gitpro
PDF
Erlang factory slides
PDF
iphone and Google App Engine
PPTX
Favorite X Code4 Features
PPTX
RabbitMQ Plugins Talk
PDF
Pycon 2008: Python Command-line Tools *Nix
PDF
iphonedevcon 2010: Cooking with iAd
Sentiment analysis for Business Analytics
Social power and_influence_in_the_nba_gitpro
Erlang factory slides
iphone and Google App Engine
Favorite X Code4 Features
RabbitMQ Plugins Talk
Pycon 2008: Python Command-line Tools *Nix
iphonedevcon 2010: Cooking with iAd

PyCon 2011: IronPython Command Line

  • 1. WRITING COMMAND-LINE TOOLS WITH IRONPYTHON AND VISUAL STUDIO Noah Gift Including PowerShell, and F#
  • 2. Talk Objectives ¤  Freak you out a bit. ¤  Teach you something you didn’t know. (Not covered in any book). ¤  Be controversial. ¤  Entertain you.
  • 3. Monty Hall Problem ¤  You are invited to a game show. ¤  Game show host shows you three doors. ¤  Behind two doors there is a goat, and behind one door is a $50,000 dollar sports car.
  • 4. Monty Hall Problem ¤  You choose a door. ¤  Instead of opening your door. The game show host then opens up another door, to reveal a goat. ¤  Do you switch your choice?
  • 5. Monty Hall Problem ¤  You always switch doors: 2/3 probability versus ½ probability. ¤  Bayes Rule shows us this: (Think Spam classification).
  • 6. Monty Hall Takeaway ¤  This isn’t intuitive to most people ¤  The human brain’s intuition is often broken. ¤  What else is your brain wrong about?
  • 7. Windows Is The Great Satan? ¤  Command-line is feeble ¤  People on twitter say it sucks ¤  Nothing COOL ever happens on Windows ¤  This isn’t “their” conference. ¤  What if your brain’s intuition is wrong about this too?
  • 8. I Used To Hate Windows ¨  I Grew Up ¨  New Philosophy: Write Code in any language, in any environment. ¨  If it is innovative, I don’t care who made it. ¨  Sorry Stallman, we disagree.
  • 9. What do most developers and admins think of when they hear Linux? ¨  Power ¨  The Shell ¨  Flexibility ¨  Command-tools ¨  Bash ¨  Man Pages ¨  SSH ¨  Awk/Sed
  • 10. What Is The Unifying Theme Around This? ¨  String Output is King ¨  Tim O’Reilly in Unix ¨  Small Tools Power Tools, “A new ¨  Flexibility user by stringing together simple ¨  Geek Power. pipelines….”
  • 11. The Hardest Part of Writing a *Nix Command-line tool in Python ¨  Remote Administration: ¨  Religious war in your Pyro vs SSH vs ??? company over using ¨  Dealing with *Nix tools optparse, getargs, that pass you back or argparse unstructured text.
  • 12. Python/Unix Command-line Tools: The End Game ¨  Remote Object Invocation (Pyro, SSH, Fabric) ¨  Security (SSH, SSL) ¨  Automation ¨  Application API ¨  Event Management (Pyro) ¨  Transactions (Mercurial?)
  • 13. How To Write A Classic IronPython CLI ¨  I needed to upgrade 100’s of thousands of lines of C# to .NET 4.0. ¨  I wrote a quick and dirty Command-line tool in IronPython.
  • 14. Project Upgrader: Validate Version   Step 1 def  validate_vsver(slnfile):          """Validates  whether  a  .sln  file  has  already  been  upgraded  to  VS  2010"""          try:                  project_file  =  open(slnfile)                  for  project_version_line  in  project_file.readlines():                          if  "Visual  Studio  2010"  in  project_version_line:                                  log.debug("Found  VS  2010  project  line:  %s"  %  project_version_line)                                  log.debug("Project  file  already  upgraded....skipping:  %s"  %  slnfile)                                  return  False                  return  True          finally:                  project_file.close()  
  • 15. Project Upgrader: Walk A Tree Step 2 def  walk_tree(path,  extension="sln",   version_control_type=".svn",  exclude_path=None):          """Walks  a  tree,  if  there  is  a  match  to  an  extension,   it  returns  a  fullpath.                    Skips  version_control_type  directories,  which  by   default  is  set  to  .svn            """          for  dirpath,dirname,filename  in  os.walk(path):                  #The  walk  should  skip  version  control  directories                  for  dir  in  dirname:  
  • 16. Project Upgrader: Convert Project   Step 3 def  convert_project(filename):          """Converts  a  project  to  VS2010  using  deven  via  .NET  Process   Class"""          p  =  Process()          p.StartInfo.UseShellExecute  =  False          p.StartInfo.RedirectStandardOutput  =  True          p.StartInfo.RedirectStandardError  =  True          p.StartInfo.FileName  =  """C:Program  Files  (x86)Microsoft   Visual  Studio  10.0Common7IDEdevenv.exe"""   print  "Stdout:  %s|  Stderr:  %s"  %  (stdout,  stderr)          p.WaitForExit()          return  p.ExitCode  
  • 17. Project Upgrader: Convert Tree   Step 4 def  convert_tree(path,  exclude_path):          """Recursively  modifies  a  tree  of  sln  files,  if  they   haven't  been  upgraded  to  VS  2010"""                    for  file  in  walk_tree(path,  exclude_path=exclude_path):                  if  not  validate_vsver(file):                          #we  should  pass  upgrading  if  validate_vsver   returns  False                          continue                  exit_code  =  convert_project(file)                  log.info("%s,  %s"  %  (exit_code,  file))  
  • 18. Project Upgrader: Run method   Step 4  def  run(self):                  args,  parser  =  self.options()                  if  args.path:                          exclude  =  None                          if  args.exclude:                                  exclude  =  args.exclude                                  log.info("Exclude  set:  %s"  %  exclude)                          log.info("%s  Running  VS2010  upgrade  on  tree:  %s  |   excluding  dirs  named:  %s"  %  (time.ctime(),  args.path,  exclude))                          convert_tree(args.path,  exclude_path=exclude)                                  else:                          parser.print_help()
  • 19. Python is like Kudzu ¤  Itsstrength is that it can embed itself into any project, any operating system. ¤  Not always the best tool, but often good enough.
  • 20. Who Is The Target Audience For Command-line Tools? ¤  Systems Administrators ¤  Power Users ¤  Developers ¤  Systems Integrators/OEM ¤  Young Geeky Stallman
  • 21. What Does It Really Mean To Write A Command-line tool on Linux ¤  You have an executable that runs in the context of, most likely, Bash. ¤  You output a string, which you can then pipeline into our Unix tools, sed, awk, grep. ¤  If your nice you create –help
  • 22. What Does It Really Mean To Write A Command-line tool on Modern Windows ¤  Itis going to run inside of PowerShell. PowerShell is your bash. ¤  You have a unified interface to .NET and every possible high level automation API you can think of. ¤  PowerShell tools expect OBJECTS not strings.
  • 23. PowerShell is Secure By Default ¤  Default File Association is Notepad or ISE. ¤  Remoting is disabled. ¤  No execution of scripts. ¤  Script Signing
  • 24. Learning To Properly Write IronPython Command-Line Tools: “A two minute affair” ¤  Actually no, not even close. ¤  Forget “most” of what you know from linux. ¤  PowerShell changes everything.
  • 25. PowerShell Object Passing Changes How Shells Work ¤  Fundamental change to understand ¤  You need to understand this to write command-line tools on Windows ¤  Game changer
  • 26. We’re not in a flyover state anymore ¤  String output is lame! ¤  PowerShell wants objects ¤  What to do…what to do…
  • 27. Fight the ecosystem and you will die ¤  Command-line tools should run in PowerShell not cmd.exe. ¤  The bash/linux CPython way, won’t cut it here. ¤  You must think the way .NET thinks. ¤  Everything takes and returns an Object.
  • 28. PowerShell Endgame: We did EVERYTHING for you. ¤  Encrypted, paranoid secure, transactional, asynchronous remoting of serialized objects ¤  High level automation API to everything. ¤  Ignore at your own peril.
  • 29. Writing a PowerShell Module In IronPython: The “real” way to write Command-line tools? ¨  Create a New Visual Studio Project ¨  Thinks Objects ¨  Use PowerShell SDK ¨  Write a Binary Module
  • 30. Installing the PowerShell SDK ¤  Download the SDK ¤  Add a reference to the DLL in your Visual Studio Project ¤ C:ProgramFiles (x86)Reference AssembliesMicrosoftWindowsPowerShell v1.0System.Management.Automation
  • 31. Finding and Loading PowerShell Modules ¨  Get-Module –all ¨  When you create a .dll in IronPython, could then simply integrate it into the PowerShell workflow.
  • 32. What is a Binary Module? ¤  A .NET assembly compiled against PowerShell libraries. ¨  For IronPython folks, this is one way to integrate into PowerShell ¨  In a lot of documentation it will refer to C# code. ¨  You can also write a PowerShell, non-compiled, module.
  • 33. Creating a Binary Module For Powershell in IronPython ¤  http://stackoverflow.com/questions/2094694/launch- powershell-under-net-4 ¤  You need to tweak some registry settings to support .NET 4.0 in PowerShell.
  • 34. Creating a Binary Module For Powershell in IronPython: Continued ¤  Should follow C# example code for best implementation advice. ¤  Note, Argparse, Optparse, etc, aren’t used. They don’t make sense. ¤  These are objects being passed into other cmdlets, and methods are being called on those objects.
  • 35. IronPython PowerShell Module Hello World Visual Studio import  clr   Project: clr.AddReference('System.Management.Automation')   print  'Hello  World'   Step 1
  • 36. IronPython PowerShell Module Hello World Visual Studio ¨  Build the project to create a .dll Project: ¨  In PowerShell Import Module Step 2 ¨  Import-Module MyModule.dll ¨  You can know interact with it from inside of .Net. Is this a commandline tool???
  • 37. Setting Up A PowerShell Profile For IronPython ¨  Just like in Bash or ZSH, aliases are your friend. ¨  Edit your $profile with the ISE, and add interactive IronPython to it.
  • 38. Creating Standalone IronPython executables ¨  Make sure you can pass objects in and out of them. ¨  Use the IronPython on codeplex: Pyc-Python Command-line compiler
  • 39. F#: The Elephant in the Room ¤  Type inference ¤  Immutable data structures ¤  Run as script or compiled ¤  Tail recursion ¤  Fully integrated with Visual Studio ¤  Sexier then Python?
  • 40. F# and Python: A Sexy Beast ¤  Mixing .dll files written in F# into IronPython modules, loaded into Powershell. ¤  Calling IronPython/CPython from inside of F# ¤  “A statically typed Python…” (Note, this will come up..just preparing you…)
  • 41. Credit Some Excellent Books That Reference PowerShell ¤  PowerShell in Action, Manning (The Bible) ¤  PowerShell Cookbook, O’Reilly ¤  IronPython in Action, Manning
  • 42. Conclusion ¤  PowerShell isn’t a competing language, it IS THE ECOSYSTEM. ¤  Windows Systems Admins are using PowerShell for everything ¤  Get your head wrapped around object based pipelines. ¤  Why doesn’t Linux have this?
  • 43. Questions? Code: https://bitbucket.org/noahgift/pycon2011- ironpython-cli