The following script could be copied to %windir%/system32 as connections.ps1 in order to run it from Lync powershell directly.
It will list all the number of connectios to the registrar pool; i have added Listing all user aliases connected to Lync within the main Function.
################################################################################################## Connections.ps1## Program to pull Lync connection information. # This program will pull complete information across all # frontend servers in a pool. It can also be used to find # specific connection information on an individual user by # supplying the user's sip address. The parameter for# the pool to access for connection information can be # pre-populated so it doesn't have to be passed on the command line.# Also it List all the connected Users.# # ACKNOWLEDGEMENT: This program's database connection information # was originally taken from the "List Connections # to Registrar Pools" submitted by Scott Stubberfield# and Nick Smith from Microsoft to the Lync 2010 # PowerShell blog # (http://blogs.technet.com/b/csps/) on June 10, 2010.# # NOTE: In order to gain remote access to each frontend server's # RTCLOCAL database where connection information is found, # you need to open the local firewall for port 1434.# Also, need to go into the SQL Server Configuration Manager # and for RTCLOCAL, enable named pipes and restart the SQL # service for the named pipes to take effect.## Port 1434 is required in order to make the connection to # the named instance RTCLOCAL on the remote machines.### Written by: Tracy A. Cerise (tracy@uky.edu)# Date: March 2011# --------------------## Modification History# Written by: Mahmoud Badran (v-mabadr@microsoft.com)# Date: July 2011# --------------------## Could add # users with enterprise voice enabled and other # individual stats to this page as well################################################################################################## ########################################################### Commandline Parameters to use for running this program ###########################################################param($Pool = "cs-se.fabrikam.com", $SIPAddr, $FilePath, [switch] $Help) ################################################################################################################################## Functions ########################################################################################################################################## function GetData { param ($sipAddr = $null, $server) ############################################################################################## # Went to using a named parameter for this function due to the # way Powershell does its thing with parameter passing, which # is NOT GOOD! At any rate, need to call this function # as you would from a command line: GetData -sipAddr "value" # -server "value" # # Also, assuming a value of NULL for the SIP address of an # individual user, mostly to use this for finding overall # values, only occasionally to seek specific users. ############################################################################################## if ($sipAddr) { $whereClause = "where R.UserAtHost = '$sipAddr' " } else { $whereClause = $null } #Define SQL Connection String $connstring = "server=$server\rtclocal;database=rtcdyn;trusted_connection=true;" #Define SQL Command $command = New-Object System.Data.SqlClient.SqlCommand $command.CommandText = "Select (cast (RE.ClientApp as varchar (100))) as ClientVersion, R.UserAtHost as UserName, Reg.Fqdn ` From rtcdyn.dbo.RegistrarEndpoint RE ` Inner Join ` rtc.dbo.Resource R on R.ResourceId = RE.OwnerId ` Inner Join ` rtcdyn.dbo.Registrar Reg on Reg.RegistrarId = RE.PrimaryRegistrarClusterId ` $whereClause ` Order By ClientVersion, UserName " $connection = New-Object System.Data.SqlClient.SqlConnection $connection.ConnectionString = $connstring $connection.Open() $command.Connection = $connection $sqladapter = New-Object System.Data.SqlClient.SqlDataAdapter $sqladapter.SelectCommand = $command $results = New-Object System.Data.Dataset $recordcount=$sqladapter.Fill($results) $connection.Close() return $Results.Tables[0]}################################################################################################# function Help { "NAME Connections.ps1 SYNOPSIS Returns current connection count for all frontend servers in a given pool including a breakdown of connection by client, frontend server and users. It can also be used to return connection information on an individual user. SYNTAX Connections.ps1 [-Pool <PoolFQDN>] [-SIPAddr] [-FilePath] [-help] DESCRIPTION This program will return a connection count for a given pool. The program can be edited to set a default pool. You will also be able to get information on an individual user by providing the users SamAccountName. As well as listing all the connected users to the default pool.
EXAMPLES -------------------------- EXAMPLE 1 -------------------------- C:\PS>connections.ps1 Description ----------- Returns information on all connections on all frontend servers in the default pool that has been hard-coded into the program. -------------------------- EXAMPLE 2 -------------------------- C:\PS>connections.ps1 -Pool alternate.pool.fqdn Description ----------- Returns information on all connections on all frontend servers in the pool given with the pool parameter. -------------------------- EXAMPLE 3 -------------------------- C:\PS>connections.ps1 -SIPAddr userid@sip.domain Description ----------- Returns all connection information for the given user including which frontend server connected to, how many connections and which clients connected with. -------------------------- EXAMPLE 4 -------------------------- C:\PS>connections.ps1 -filepath c:\path\to\file\filename.csv Description ----------- Returns information on all connections on all frontend servers in the default pool that has been hard-coded into the program and in addition writes out all the raw connection information into the filename specified. " exit }################################################################################################# ################################################################################################################################## Main Program ########################################################################################################################################## ################################################ Main program############################################# # If the help switch is toggledif ($help) { Help} ## Here is where we pull all the frontend server(s) from our topology for the designated# pool and iterate through them to get current connections from all the servers.## There are three possibilities here:# 1. Have collection of frontend servers# 2. Have a single frontend server or# 3. Have no servers## Only need to check for the first two cases, the third is implied otherwise... $feServers = Get-CsComputer -Pool $Pool if ($feServers.count) { # Frontend pool collection, iterate through them for ($i=0; $i -lt $feServers.count; $i++) { if ($SIPAddr) { $data = GetData -sipAddr $SIPAddr -server $feServers[$i].identity } else { $data = GetData -server $feServers[$i].identity } # Since an individual user's connections are all homed on one server, won't have # data coming back from all frontend servers in the case of searching for a # single user if ($data) { $overallrecords = $overallrecords + $data } }}elseif ($feServers) { # Have a standalone server or a FE pool of only one server if ($SIPAddr) { $data = GetData -sipAddr $SIPAddr -server $feServers.identity } else { $data = GetData -server $feServers.identity } # Make sure we have data to work with... if ($data) { $overallrecords = $data }} # Check to see if we have any data to act onif (! $overallrecords) { write-host -ForegroundColor Yellow "`r`nNothing returned from query!`r`n" # Nothing else to do exit}else { $count=0 $userHash = @{} $clientHash = @{} $serverHash = @{} $userlist = @{} $overallrecords | foreach-object { # Each record has three components: Connected Client Version, User's SIP # address and the frontend server's FQDN. Here, we'll build a hash # for each of these components for each record. # Build hash of users
$userlist = ($_.UserName)
if (! $userHash.ContainsKey($_.UserName)) { $userHash.add($_.UserName, 1) } else { $userHash.set_item($_.UserName, ($userHash.get_item($_.UserName) + 1)) } # Build hash of servers if (! $serverHash.ContainsKey($_.fqdn)) { $serverHash.add($_.fqdn, 1) } else { $serverHash.set_item($_.fqdn, ($serverHash.get_item($_.fqdn) + 1)) } # Build hash of clients # Lets get rid of the extraneous verbage from the client version names, if applicable if ($_.ClientVersion.contains('(')) { # Get rid of extraneous verbage $clientName = $_.ClientVersion.substring(0, $_.ClientVersion.IndexOf('(')) } else { # Have a client name with no extraneous verbage $clientName = $_.ClientVersion } if (! $clientHash.ContainsKey($clientName)) { $clientHash.add($clientName, 1) } else { $clientHash.set_item($ClientName, ($clientHash.get_item($ClientName) + 1)) } $count++ }} #################################### Output Query Results #################################### # If output to file is chosen, then write out the results and a note to that effect# then exit if ($FilePath) { $overallrecords | Export-Csv $FilePath write-host -foregroundcolor green "`r`nQuery Results written to $FilePath`r`n" exit} write-host -foregroundcolor cyan "`r`nClient Version/Agent Connections"write-host -foregroundcolor cyan "--------------------------------------------------" foreach ($key in $clientHash.keys) { # Break down client version into its two component parts and print # them out along with their respective counts in a nice format $index = $key.indexof(" ") if ($index -eq "-1") { # No second part $first = $key $second = " " } else { # Client version/agent has to main parts $first = $key.substring(0, $index) $second = $key.substring($index + 1) } $value = $clientHash.$key "{0, -20} {1, -20} {2, 5}" -f $first, $second, $value} write-host -foregroundcolor cyan "--------------------------------------------------" write-host -foregroundcolor cyan "`r`n`r`nFrontend Server Connections"write-host -foregroundcolor cyan "-------------------------------" foreach ($key in $serverHash.keys) {
$value = $serverHash.$key "{0, -22} {1, 5}" -f $key, $value}
write-host -foregroundcolor cyan "-------------------------------" "{0, -22} {1, 5}" -f "Total connections...", $count "`r`n" write-host -foregroundcolor cyan "Total Unique Users/Clients"write-host -foregroundcolor cyan "-------------------------------""{0, -22} {1, 5}" -f "Users...............", $userHash.count"{0, -22} {1, 5}" -f "Client Versions.....", $clientHash.countwrite-host -foregroundcolor cyan "-------------------------------""`r`n"
write-host -foregroundcolor cyan "Connected Users List"
foreach ($key in $userHash.keys) { $value = $userHash.$key "{0, -22} {1, 5}" -f $key, $value}
write-host -foregroundcolor cyan "-------------------------------""`r`n" Write-Host -ForegroundColor Green "Query complete`r`n"
These Ports should be open from Client side to Server Side
Required Server Ports (by Server Role)
Server role
Service name
Port
Protocol
Notes
Front End Servers
Lync Server Front-End service
5060
TCP
Optionally used by Standard Edition servers and Front End Servers for static routes to trusted services, such as remote call control servers.
Front-End service
5061
TCP(TLS)
Used by Standard Edition servers and Front End pools for all internal SIP communications between servers (MTLS), for SIP communications between Server and Client (TLS) and for SIP communications between Front End Servers and Mediation Servers (MTLS). Also used for communications with Monitoring Server.
444
HTTPS
Used for communication between the Focus (the Lync Server component that manages conference state) and the individual servers.
135
DCOM and remote procedure call (RPC)
Used for DCOM based operations such as Moving Users, User Replicator Synchronization, and Address Book Synchronization.
Lync Server IM Conferencing service
5062
Used for incoming SIP requests for instant messaging (IM) conferencing.
Lync Server Web Conferencing service
8057
TCP (TLS)
Used to listen for Persistent Shared Object Model (PSOM) connections from client.
Web Conferencing Compatibility Service
8058
Used to listen for Persistent Shared Object Model (PSOM) connections from the Live Meeting client and previous versions of Communicator.
Lync Server Audio/Video Conferencing service
5063
Used for incoming SIP requests for audio/video (A/V) conferencing.
57501-65335
TCP/UDP
Media port range used for video conferencing.
Web Compatibility service
80
HTTP
Used for communication from Front End Servers to the web farm FQDNs (the URLs used by IIS web components) when HTTPS is not used.
Lync Server Web Compatibility service
443
Used for communication from Front End Servers to the web farm FQDNs (the URLs used by IIS web components).
Lync Server Conferencing Attendant service (dial-in conferencing)
5064
Used for incoming SIP requests for dial-in conferencing.
5072
Used for incoming SIP requests for Microsoft Lync 2010 Attendant (dial in conferencing).
Front End Servers that also run a Collocated Mediation Server
Lync Server Mediation service
5070
Used by the Mediation Server for incoming requests from the Front End Server to the Mediation Server.
5067
Used for incoming SIP requests from the PSTN gateway to the Mediation Server.
5068
5081
Used for outgoing SIP requests from the Mediation Server to the PSTN gateway.
5082
Lync Server Application Sharing service
5065
Used for incoming SIP listening requests for application sharing.
49152-65335
Media port range used for application sharing.
Lync Server Conferencing Announcement service
5073
Used for incoming SIP requests for the Lync Server Conferencing Announcement service (that is, for dial-in conferencing).
Lync Server Call Park service
5075
Used for incoming SIP requests for the Call Park application.
Audio Test service
5076
Used for incoming SIP requests for the Audio Test service.
Not applicable
5066
Used for outbound Enhanced 9-1-1 (E9-1-1) gateway.
Lync Server Response Group service
5071
Used for incoming SIP requests for the Response Group application.
8404
TCP (MTLS)
Lync Server Bandwidth Policy Service
5080
Used for call admission control by the Bandwidth Policy service for A/V Edge TURN traffic.
448
Used for call admission control by the Lync Server Bandwidth Policy Service.
Front End Servers where the Central Management store resides
CMS Replication service
445
Used to push configuration data from the Central Management store to servers running Lync Server.
All internal servers
Various
49152-57500
Media port range used for audio conferencing on all internal servers. Used by all servers that terminate audio: Front End Servers (for Lync Server Conferencing Attendant service, Lync Server Conferencing Announcement service, and Lync Server Audio/Video Conferencing service), and Mediation Server.
Directors
Optionally used for static routes to trusted services, such as remote call control servers.
Used for internal communications between servers and for client connections.
Mediation Servers
Used by the Mediation Server for incoming requests from the Front End Server.
Used for incoming SIP requests from the PSTN gateway.
Used for SIP requests from the Front End Servers.
These Ports should be open from Server side to Client Side
Required Client Ports
Component
Clients
67/68
DHCP
Used by Lync Server 2010 to find the Registrar FQDN (that is, if DNS SRV fails and manual settings are not configured).
Used for client-to-server SIP traffic for external user access.
TCP (PSOM/TLS)
Used for external user access to web conferencing sessions.
TCP (STUN/MSTURN)
Used for external user access to A/V sessions and media (TCP)
3478
UDP (STUN/MSTURN)
6891-6901
Used for file transfer between Lync 2010 clients and previous clients (clients of Microsoft Office Communications Server 2007 R2, Microsoft Office Communications Server 2007, and Live Communications Server 2005).
1024-65535 *
Audio port range (minimum of 20 ports required)
Video port range (minimum of 20 ports required).
Peer-to-peer file transfer (for conferencing file transfer, clients use PSOM).
Application sharing.
Microsoft Lync 2010 Phone Edition for Aastra 6721ip common area phone Microsoft Lync 2010 Phone Edition for Aastra 6725ip desk phone
Microsoft Lync 2010 Phone Edition for Polycom CX500 common area phone
Microsoft Lync 2010 Phone Edition for Polycom CX600 desk phone
Used by the listed devices to find the Lync Server 2010 certificate, provisioning FQDN, and Registrar FQDN.
1xx—Informational Responses100 Trying180 Ringing181 Call Is Being Forwarded182 Queued183 Session Progress
2xx—Successful Responses200 OK202 accepted: It Indicates that the request has been understood but actually can't be processed
3xx—Redirection Responses300 Multiple Choices301 Moved Permanently302 Moved Temporarily305 Use Proxy380 Alternative Service
4xx—Client Failure Responses400 Bad Request401 Unauthorized (Used only by registrars or user agents. Proxies should use proxy authorization 407)402 Payment Required (Reserved for future use)403 Forbidden404 Not Found (User not found)405 Method Not Allowed406 Not Acceptable407 Proxy Authentication Required408 Request Timeout (Couldn't find the user in time)409 Conflict410 Gone (The user existed once, but is not available here any more.)412 Conditional Request Failed413 Request Entity Too Large414 Request-URI Too Long415 Unsupported Media Type416 Unsupported URI Scheme417 Unknown Resource-Priority420 Bad Extension (Bad SIP Protocol Extension used, not understood by the server)421 Extension Required422 Session Interval Too Small423 Interval Too Brief424 Bad Location Information428 Use Identity Header429 Provide Referrer Identity433 Anonymity Disallowed436 Bad Identity-Info437 Unsupported Certificate438 Invalid Identity Header480 Temporarily Unavailable481 Call/Transaction Does Not Exist482 Loop Detected483 Too Many Hops484 Address Incomplete485 Ambiguous486 Busy Here487 Request Terminated488 Not Acceptable Here489 Bad Event491 Request Pending493 Undecipherable (Could not decrypt S/MIME body part)494 Security Agreement Required
5xx—Server Failure Responses500 Server Internal Error501 Not Implemented: The SIP request method is not implemented here502 Bad Gateway503 Service Unavailable504 Server Time-out505 Version Not Supported: The server does not support this version of the SIP protocol513 Message Too Large580 Precondition Failure
6xx—Global Failure Responses600 Busy Everywhere603 Decline604 Does Not Exist Anywhere606 Not Acceptable
http://en.wikipedia.org/wiki/List_of_SIP_response_codes
http://www.tmcnet.com/it/0801/0801radv.htm
Various standards organizations have considered signalling for voice and video over IP from different approaches. Two of the primary standards in use today are H.323 and SIP. The International Telecommunications Union (ITU) established H.323 as the first communications protocol for real time multimedia communication over IP. SIP is the Internet Engineering Task Force (IETF) approach to voice and video over IP.
H.323 is an umbrella standard that provides well-defined system architecture, implementation guidelines that cover the entire call set-up, call control, and the media used in the call. Whereas H.323 takes the more telecommunications-oriented approach to voice/video over IP, SIP takes an Internet-oriented approach. SIP is a text-based protocol that was designed to work hand in hand with other core Internet protocols such as HTTP. Many functions in a SIP-based network rely upon complementary protocols, including IP.
The different entities that make up an H.323 network include gateways, terminals, and conferencing bridges, along with a gatekeeper. The H.323 architecture is peer-to-peer, supporting user-to-user communications without a centralized controlling entity. SIP entities include user agents that may operate as a client or server, depending on the role in any particular call. A SIP architecture requires a proxy server to route calls to other entities and a registrar. All other servers and parts of the network are undefined and not mandatory for every call.
H.323 call information is written in binary code, with a defined set of translations for each code. This was done to reduce the size of the transmission and save bandwidth. New codes have to have an agreed-upon definition between parties prior to a call. The standard can be updated, but any additions to the standard require backward compatibility with the existing standard. Features can only be added, not subtracted.
SIP itself only defines the initiation of a session. All other parts of the session are covered by other protocols, which may come from other applications or functions not necessarily designed for real time multimedia over IP. SIP commands are coded in text rather than binary. It's easier to add and understand these codes, but it does increase the size of messages that are sent. This text-coding scheme comes from the Web-browsing scheme, where it has been successful. Numbers don't have to be allocated to commands for each message in advance. If text commands are added, the other side automatically understands them.
SIP is less defined and more open than ITU standards like H.323, but that can result in interoperability difficulties because of different implementations of the standard. Every developer may implement their own version of SIP with unique extensions that aren't included in the basic standard. Two variations used today are SIP-T, which addresses SIP telephony, and DCS, a variation for packet cable voice over IP transmission. In addition to this, there are numerous proposals for using SIP for other applications, such as appliances and instant messaging, each of which have their own extensions that aren't in the basic standard.
While SIP's openness allows more interoperability with other protocols, this same openness can lead to interoperability problems because the lack of definition in the protocol itself means there are a number of different interpretations, each of which may have difficulty interoperating with others. In addition, to date there are more than 80 contributions to SIP, all of which add to the complexity of interoperability issues. "SIP Bake-offs" provide vendors an opportunity to test their products for interoperability. However, as the number of flavors of SIP implementations increase, together with increasing extensions, the completeness and effectiveness of such testing will decrease.
Both protocols provide comparable functionality using different mechanisms and provide similar quality of service. While SIP is more flexible and scalable, H.323 offers better network management and interoperability. The differences between the two protocols are diminishing with each new version. Although there are numerous industry debates about the merits of the two protocols, the truth is that both of them, along with other complementary protocols, are necessary to provide universal access and to support IP-based enhanced services.
Interoperability ScenariosBoth protocols have been widely deployed, so interoperability between SIP and H.323 is essential to ensure full end-to-end connectivity. Because of the inherent differences between H.323 and SIP, accommodation must be made to allow interoperability between the two protocols. In the simplest scenario where both protocols are used within the same administrative domain, call set-up messages must be translated, then RTP can be used for communication directly between a SIP phone and an H.323 phone.
The scenario becomes more complex when SIP and H.323 are operating in separate administrative domains. A gateway is required to translate messages, as well as information on how to find addresses of destination endpoints and convert those addresses so they can be interpreted by the other protocol.
Another issue is capabilities exchange. In H.323, after the call is set up, the two endpoints "announce" what capabilities they have for variables such as compression and video. Because these capabilities are known up front, if a variable -- such as available bandwidth -- changes during the call, the call set-up can be changed in mid-call. This couldnt be done in SIP without initiating a new call. For interactive multimedia communication, the inability of SIP to allow mid-call capabilities negotiation could be significant.
H.323 defines conferencing as part of the standard, including both centralized and decentralized conferencing. SIP has no definition for conferencing, but there is a process within SIP for conferencing that is similar to H.323, but which has not been formally defined as part of the standard. Conferencing remains open to interpretation, with different approaches in use.
Here To StayBoth SIP and H.323 are here to stay. There will very likely not be a "winner" or a "loser" in the SIP versus H.323 debate. Both protocols offer strengths and weaknesses. SIP is extremely flexible and can be adapted to a number of implementations. SIP allows for the use of established protocols from other applications, such as HTTP and HTML. Because these tools are already defined, it's easier to add applications like instant messaging or Web conferencing to SIP. For developers, SIP allows use of a variety of existing building blocks for applications that will interoperate with other Internet applications. Meanwhile, H.323 allows better interoperability, network management, and call control.
Instead of concentrating on one standard versus another, the voice/video over IP community needs to work on better ways of ensuring interoperability between standards to provide end-to-end connectivity throughout the network and to offer the value-added IP-centric services that will demonstrate the power of IP-based communications.
SIP
H.323
"New World" - a relative of Internet protocols -
simple, open and horizontal
"Old World" - complex, deterministic and vertical
IETF
ITU
Carrier-class solution addressing the wide area
Borne of the LAN - focusing on enterprise conferencing priorities
A simple toolkit upon which smart clients and applications can be built.
It re-uses Net elements (URLs, MIME and DNS)
H.323 specifies everything including the codec for the media and how you carry the packets in RTP
Leaves issues of reliability to underlying network
Assumes fallibility of network - an unnecessary overhead
SIP messages are formatted as text.
H.323 messages are ASN.1 binary encoded, adding complexity
Minimal delay - simplified signalling scheme makes it faster
Possibilities of delay (up to 7 or 8 seconds!)
Slim and Pragmatic
The suite is too cumbersome to deploy easily
Seamless interaction with other media -
services are only limited by the developers imagination
Services are nailed-down and constricted
Many vendors developing products
The majority of legacy existing IP telephony products rely on the H.323 suite
Trouble shooting procedures and asking for Help!:
To trouble shoot any problem you face we need to follow some procedure in order to get the most efficient solution to our problems
First we have to specify the problem by:
1) Describe what you are trying to do
2) What steps you took to do number 1 (list the instructions you followed)
3) What error message you are getting
4) What you have done to research the problem (searched bing, google, etc)
5) Lastly ask for a pointer in the direction of the answer, rather than just the answer
Before You Ask
Before asking a technical question by e-mail, or in a newsgroup, or on a website chat board, do the following:
When you ask your question, display the fact that you have done these things first; this will help establish that you're not being a lazy sponge and wasting people's time.
Better yet, display what you have learned from doing these things. We like answering questions for people who have demonstrated they can learn from the answers.
Lastly, if you find your question hasn't been answered in the time you need it to, please don't repost the same question. It may be that no one had the time to look at your question or they may not have the answer. Doing so only fills up people's mailboxes.
Use tactics like doing a Bing search on the text of whatever error message you get (searching technet, blogs, groups as well as Web pages). This might well take you straight to fix documentation or a mailing list thread answering your question. Even if it doesn't, saying "I binged on the following phrase but didn't get anything that looked promising" is a good thing to include in e-mail or news postings requesting help.
Prepare your question. Think it through. Hasty-sounding questions get hasty answers or none at all. The more you do to demonstrate that having put thought and effort into solving your problem before seeking help, the more likely you are to actually get help.
Never assume you are entitled to an answer. You are not; you aren't, after all, paying for the service. You will earn an answer, if you earn it, by asking a substantial, interesting, and thought-provoking question - one that implicitly contributes to the experience of the community rather than merely passively demanding knowledge from others.
On the other hand, making it clear that you are able and willing to help in the process of developing the solution is a very good start. "Would someone provide a pointer?", "What is my example missing?", and "What site should I have checked?" are more likely to get answered than "Please post the exact procedure I should use." because you're making it clear that you're truly willing to complete the process if someone can just point you in the right direction.
Use meaningful, specific subject headers
On mailing lists, newsgroups or Web forums, the subject header is your golden opportunity to attract qualified experts' attention in around 50 characters or fewer.
Don't waste it on babble like "Please help me" (let alone "PLEASE HELP ME!!!!"; messages with subjects like that get discarded by reflex). Don't try to impress us with the depth of your anguish; use the space for a super-concise problem description instead.
One good convention for subject headers, used by many tech support organizations, is "object - deviation". The "object" part specifies what thing or group of things is having a problem, and the "deviation" part describes the deviation from expected behavior.
Stupid:
HELP! Sending mails is not working on my server!
Smart:
Exchange SMTP refuses to send mail.
Smarter:
Exchange 2010 SMTP error code “405 temporary problem”.
Make it easy to reply
Finishing your query with "Please send your reply to... " makes it quite unlikely you will get an answer.
Write in clear, grammatical, correctly-spelled language
We've found by experience that people who are careless and sloppy writers are usually also careless and sloppy at thinking and coding (often enough to bet on,anyway). Answering questions for careless and sloppy thinkers is not rewarding; we'd rather spend our time elsewhere.
Send questions in accessible, standard formats
If you make your question artificially hard to read, it is more likely to be passed over in favor of one that isn't. So:
Send plain text mail, not HTML.
MIME attachments are usually OK, but only if they are real content (such as an attached source file or patch), and not merely boilerplate generated by your mail client (such as another copy of your message).
Don't send e-mail in which entire paragraphs are single multiply-wrapped lines. (This makes it too difficult to reply to just part of the message.) Assume that your respondents will be reading mail on 80-character-wide text displays and set your line wrap accordingly, to something less than 80.
However, do not wrap data (such as log file dumps or session transcripts) at any fixed column width. Data should be included as-is, so respondents can have confidence that they are seeing what you saw.
Never, ever expect people to be able to read closed proprietary document formats.Most people react to these about as well as you would to give them a packed virus.
Be precise and informative about your problem
Describe the symptoms of your problem or bug carefully and clearly.
Describe the environment in which it occurs (machine, OS, application, whatever). Provide your vendor's distribution and release level (e.g.: "Windows 2003 SP1", "Windows 2008 R2", Firmware Version xxx, etc.).
Send ALL the log files and reports related to the problem.
Describe the research you did to try and understand the problem before you asked the question.
Describe the diagnostic steps you took to try and pin down the problem yourself before you asked the question.
Describe any possibly relevant recent changes in your computer or software configuration.
Don't claim that you have found a bug
When you are having problems with a piece of software, don't claim you have found a bug unless you are very, very sure of your ground. Hint: unless you can provide a source-code patch that fixes the problem, or a regression test against a previous version that demonstrates incorrect behavior, you are probably not sure enough. This applies to web pages and documentation, too; if you have found a documentation "bug", you should supply replacement text and which pages it should go on.
The people who wrote the software work very hard to make it work as well as possible. If you claim you have found a bug, you'll be impugning their competence,which may offend some of them even if you are correct. It's especially undiplomatic to yell "bug" in the Subject line.
When asking your question, it is best to write as though you assume you are doing something wrong, even if you are privately pretty sure you have found an actual bug.
If there really is a bug, you will hear about it in the answer. Play it so the maintainers will want to apologize to you if the bug is real, rather than so that you will owe them an apology if you have messed up.
Describe the problem's symptoms, not your guesses
It's not useful to tell programmers what you think is causing your problem. (If your diagnostic theories were such hot stuff, would you be consulting others for help?) So,make sure you're telling them the raw symptoms of what goes wrong, rather than your interpretations and theories. Let them do the interpretation and diagnosis. If you feel it's important to state your guess, clearly label it as such and describe why that answer isn't working for you.
Describe your problem's symptoms in chronological order
The clues most useful in figuring out something that went wrong often lie in the events immediately prior. So, your account should describe precisely what you did, and what the machine did, leading up to the blowup. In the case of command-line processes, having a session log (e.g., using the script utility) and quoting the relevant twenty or so lines is very useful.
Describe the goal, not the step
If you are trying to find out how to do something (as opposed to reporting a bug), begin by describing the goal. Only then describe the particular step towards it that you are blocked on.
Don't flag your question as "Urgent", even if it is for you
That's your problem, not ours. Claiming urgency is very likely to be counter-productive: most programmers will simply delete such messages as rude and selfish attempts to elicit immediate and special attention.
Courtesy never hurts, and sometimes helps
Be courteous. Use "Please" and "Thanks for your attention" or "Thanks for your consideration". Make it clear you appreciate the time people spend helping you for free.
Follow up with a brief note on the solution
Send a note after the problem has been solved to all who helped you; let them know how it came out and thank them again for their help. If the problem attracted general interest in a mailing list or newsgroup, it's appropriate to post the followup there.
RTFM and STFW: How To Tell You've Seriously Screwed Up
There is an ancient and hallowed tradition: if you get a reply that reads "RTFM", the person who sent it thinks you should have Read The ****** Manual. He or she is almost certainly right. Go read it.
RTFM has a younger relative. If you get a reply that reads "STFW", the person who sent it thinks you should have Searched The ****** Web. He or she is almost certainly right. Go search it. (The milder version of this is when you are told "Bing is your friend!")
If you don't understand...
If you don't understand the answer, do not immediately bounce back a demand for clarification. Use the same tools that you used to try and answer your original question (manuals, FAQs, the Web, skilled friends) to understand the answer. Then, if you still need to ask for clarification, exhibit what you have learned.
Dealing with rudeness
When you perceive rudeness, try to react calmly. If someone is really acting out, it is very likely a senior person on the list or newsgroup or forum will call him or her on it.
If that doesn't happen and you lose your temper, it is likely that the person you lose it at was behaving within the programmer community's norms and you will be considered at fault. This will hurt your chances of getting the information or help you want.
If You Can't Get An Answer
In general, simply re-posting your question is a bad idea. This will be seen as pointlessly annoying. Have patience: the person with your answer may currently be asleep, in a different time-zone.
http://www.catb.org/~esr/faqs/smart-questions.html
This ending week I encountered an interesting case where an organization has a large # of stand-alone servers (not joined to a domain controller). The number is 750++ servers and growing. The challenge was how to manage identity on the servers.
Fast forward skipping the discussions why these servers are stand alone and not joined to an Active Directory forest.
FIM as it stands provides brilliant support for Active Directory yet it doesn’t provide an out of the box support for WinNT account storage. A custom M/A was due. Code is attached to this post; hope it helps you in a similar situation. Some notes:
The M/A provides the following features:
How the code works:
In addition to the code, I have attached M/A metadata file and an export to ease the deployment operation on your end you can use FIM Management Agent Packaging utility to generate your own named M/A.
For more information on how to create a custom M/A
Creating Connected Data Source Extensions: http://msdn.microsoft.com/en-us/library/ms695383.aspx How to create Management Agents: http://msdn.microsoft.com/en-us/library/ms695385.aspx
Questions & comments? The easiest way is find me on Twitter: @khnidk
Khaled Hnidk
Did you download it ??... Not Yet...
Go NOW and GET CTP3 from the below URL
http://www.microsoft.com/sqlserver/en/us/default.aspx