Determine in what module a class resides - powershell

I have some code that works a treat in the ISE, but fails in a script. It fails where I use [System.Windows.Media.GlyphTypeface]::new(), and this is a common occurrence, a module that is loaded automatically in the ISE, but needs to be loaded discretely in a script.
So that brings up the generic question, is there a way to start from the type and determine what module is needed? Or is this one of those where you just need to already know and/or be able to mine the Microsoft support documents for the info?

System.Windows.Media.GlyphTypeface is not a PowerShell module. It is a .NET Framework class. You generally will need to check the documentation for the class to find the Assembly it belongs to. (https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.glyphtypeface) In this case PresentationCore.dll.
You would use AddType to load this assembly.
Add-Type -AssemblyName PresentationCore
A search for "find .net assembly from class name" will find some Q&A on this topic, but mostly with C# examples.

Related

Creating a custom powershell module without exposing code

I want to create a custom powershell module that I can distribute without exposing the code. The script includes API calls with app specific private keys that I don't want to compromise. I've seen a lot of discussions about this over the years, but nothing that really solves my problem.
Is there a good way to create a custom powershell module without exposing the underlying code? I want to be able to distribute the powershell module, for others to import or install.
this may be what you are looking for : https://www.powershellgallery.com/packages/ps2exe/1.0.11
but be careful, the API key will still be in the compiled file at someplace. You can try and cipher it, but if it's needed for your script, it will be in your file no matter how you try to hide it. the question is why do you need to ship it inside your script in the first place ? I mean that any of your script's user will be using your private key which is likely not what you want to do

Include runtime type definitions using VSCode extension

I'm working on a library that lets users run Node processes from inside another application. The library is called "max-api"; functions for sending data to the host application are exposed through a Node module and are loaded in the expected way:
const maxAPI = require("max-api");
However, the user never interacts with this module directly. Rather, when the host application launches the Node process, it intercepts the call to require, checks if the name of the module is "max-api", and provides the module if so.
This works great, the only issue is we have no way to provide type definitions for this modules. So, the user doesn't get any autocomplete or validation for functions in the "max-api" module. I was thinking of writing a VSCode extension to provide these, but I'm not 100% sure how to get started. Thanks in advance for any advice.
You could write a TS typings file (see Definitely Typed). This would be installed in node_modules/#types and vscode will automatically pick it up to provide code completion for your module.

how to add spellckeck property to c# code

I'm developing an application using C# 3.5 under windows form application. The problem is SpellCheck property is not available in textbox properties. I added PresentationFramework Assembly, System.Windows.Controls Namespace and System.Windows.Controls.Primitives Namespace, but still doesn't work. I'm trying to test the following example.
myTextBox.SpellCheck.IsEnabled = true;
any ideas ?...
You will probably need to use a 3rd party control to perform spell checking. I suspect that you would want to call the spell checker's CheckSpelling() method on specific key events like spaces, commas, periods, question marks, etc.

How do I get my Objects to work in ASP.NET MVC2

I'm rather new to MVC2 (never been in MCV1) though I'm a WebForms developer for some years now...
in my MCV 2 start project I created a App_Code folder that I would put my Business Classes on it, I also add 2 References to 2 DLLs used for the API I'm about to use.
But I don't get Intellisense on the referenced objects
What am I doing wrong?
alt text http://www.balexandre.com/temp/2010-07-28_1343.png
Is this so much different from the WebForms part?
Added
Even if I put the Object in Models instead App_Code (where I normally put all code in WebForms) I still don't get the normal intelisense, so... it just tells me that something is wrong ... dang! MVC is hard! I probably should do this in WebForms...
alt text http://www.balexandre.com/temp/2010-07-28_1509.png
This has nothing to do with MVC2, and everything to do with you're doing it wrong. I can tell that its a possibility, as you're using App_Code (I mean, who does that?). I'd definitely suggest backing up and reading some MVC tutorials, as it IS much different (although not in the way you're asking about).
I'm not exactly sure WHAT you're doing wrong, however. It might bethat PerceptiveMCAPI is internal to the assembly, it might be because there is a bug in VS, it might be that you haven't imported the correct namespace... it could be a number of different things.
I'd do the following: 1) load the assembly in reflector and make sure you have the namespace and type name and that it is public 2) use the fully qualified name of the type 3) compile, check all errors and 4) restart VS.
If all else fails, Connect.
See the Models directory -- that's where your model classes would go, assuming the class is a view model class. Having said that, it should be able to pick up and provide intellisense for whatever references you add. App_Code isn't really intended for a Web Application project (the type used by MVC) where the code is compiled statically, but rather for a WebSite where the code is compiled dynamically at runtime. It could be the "special" nature of the directory that is causing the problem because it doesn't fit the project type. You might try simply creating a different directory (if Models isn't appropriate) and not use the special App_Code directory for your code. A separate class library project with a project reference in the web application would be another alternative and is the one I usually use for non-viewmodel/controller code.

Accessing .NET components from Powershell

I want to use Powershell to write some utilities, leveraging our own .NET components to handle the actual work. This is in place of writing a small console app to tie the calls together. My question is where I would find a good source of documentation or tutorial material to help me fast track this?
If you want to load an assembly into your PowerShell session, you can use reflection and load the assembly.
[void][System.Reflection.Assembly]::LoadFrom(PathToYourAssembly)
After you load your assembly, you can call static methods and create new instances of a class.
A good tutorial can be found here.
Both books mentioned by EBGreen are excellent. The PowerShell Cookbook is very task oriented and PowerShell in Action is a great description of the language, its focus and useability. PowerShell in Action is one of my favorite books. :)
The link that Steven posted is a good example. I don't know of any extensive tutorial. Both the Windows Powershell Cookbook and Windows Powershell In Action have good chapters on the subject. Also, look at the ::LoadFromFile method of the System.Reflection.Assembly class in case your in-house assemblies are not loaded in the GAC.
you can use [] or use add-type -AssemblyName "System.example" to use assembly for example use :
[system.drawing]::class ...